<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 在 PySide 中拖放 > 原文: [http://zetcode.com/gui/pysidetutorial/dragdrop/](http://zetcode.com/gui/pysidetutorial/dragdrop/) 在 PySide 教程的這一部分中,我們將討論拖放操作。 在計算機圖形用戶界面中,拖放是單擊虛擬對象并將其拖動到其他位置或另一個虛擬對象上的動作(或支持以下動作)。 通常,它可用于調用多種動作,或在兩個抽象對象之間創建各種類型的關聯。 (維基百科) 拖放功能是圖形用戶界面最明顯的方面之一。 拖放操作使用戶可以直觀地完成復雜的事情。 通常,我們可以拖放兩件事。 數據或某些圖形對象。 如果將圖像從一個應用拖到另一個應用,則會拖放二進制數據。 如果我們在 Firefox 中拖動選項卡并將其移動到另一個位置,則將拖放圖形組件。 ## 簡單的拖放 在第一個示例中,我們將具有`QtGui.QLineEdit`和`QtGui.QPushButton`。 我們將從行編輯小部件中拖動純文本并將其拖放到按鈕小部件上。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial This is a simple drag and drop example. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Button(QtGui.QPushButton): def __init__(self, title, parent): super(Button, self).__init__(title, parent) self.setAcceptDrops(True) def dragEnterEvent(self, e): if e.mimeData().hasFormat('text/plain'): e.accept() else: e.ignore() def dropEvent(self, e): self.setText(e.mimeData().text()) class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): qe = QtGui.QLineEdit('', self) qe.setDragEnabled(True) qe.move(30, 65) button = Button("Button", self) button.move(190, 65) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('Simple Drag & Drop') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 簡單拖動&放下操作。 ```py class Button(QtGui.QPushButton): def __init__(self, title, parent): super(Button, self).__init__(title, parent) ``` 為了在`QtGui.QPushButton`小部件上放置文本,我們必須重新實現一些方法。 因此,我們創建了自己的`Button`類,該類將從`QtGui.QPushButton`類繼承。 ```py self.setAcceptDrops(True) ``` 我們為小部件啟用放置事件。 ```py def dragEnterEvent(self, e): if e.mimeData().hasFormat('text/plain'): e.accept() else: e.ignore() ``` 首先,我們重新實現`dragEnterEvent()`方法。 我們會告知數據類型,我們將接受。 在我們的情況下,它是純文本。 ```py def dropEvent(self, e): self.setText(e.mimeData().text()) ``` 通過重新實現`dropEvent()`方法,我們將定義在放置事件上將要執行的操作。 在這里,我們更改按鈕小部件的文本。 ```py qe = QtGui.QLineEdit('', self) qe.setDragEnabled(True) ``` `QtGui.QLineEdit`小部件具有對拖動操作的內置支持。 我們需要做的就是調用`setDragEnabled()`方法來激活它。 ![Simple Drag & Drop](https://img.kancloud.cn/d5/57/d557e43cada40995b59e775995493df0_308x178.jpg) 圖:簡單 Drag & Drop ## 拖動和放置一個按鈕小部件 在下面的示例中,我們將演示如何拖放按鈕小部件。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial In this example, we drag and drop a button. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Button(QtGui.QPushButton): def __init__(self, title, parent): super(Button, self).__init__(title, parent) def mouseMoveEvent(self, e): if e.buttons() != QtCore.Qt.RightButton: return mimeData = QtCore.QMimeData() drag = QtGui.QDrag(self) drag.setMimeData(mimeData) drag.setHotSpot(e.pos() - self.rect().topLeft()) dropAction = drag.start(QtCore.Qt.MoveAction) def mousePressEvent(self, e): QtGui.QPushButton.mousePressEvent(self, e) if e.button() == QtCore.Qt.LeftButton: print 'press' class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setAcceptDrops(True) self.btn = Button('Button', self) self.btn.move(100, 65) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('Click or move') self.show() def dragEnterEvent(self, e): e.accept() def dropEvent(self, e): position = e.pos() self.btn.move(position) e.setDropAction(QtCore.Qt.MoveAction) e.accept() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的代碼示例中,窗口上有一個`QtGui.QPushButton`。 如果我們用鼠標左鍵單擊該按鈕,則會在控制臺上打印`'press'`。 通過右鍵單擊并移動按鈕,我們在按鈕小部件上執行拖放操作。 ```py class Button(QtGui.QPushButton): def __init__(self, title, parent): super(Button, self).__init__(title, parent) ``` 我們創建一個`Button`類,該類將從`QtGui.QPushButton`派生。 我們還重新實現了`QtGui.QPushButton`的兩種方法`mouseMoveEvent()`和`mousePressEvent()`。`mouseMoveEvent()`方法是拖放操作開始的地方。 ```py if event.buttons() != QtCore.Qt.RightButton: return ``` 在這里,我們決定只能使用鼠標右鍵執行拖放操作。 鼠標左鍵保留用于單擊該按鈕。 ```py mimeData = QtCore.QMimeData() drag = QtGui.QDrag(self) drag.setMimeData(mimeData) drag.setHotSpot(event.pos() - self.rect().topLeft()) ``` 在這里,我們創建一個`QtGui.QDrag`對象。 ```py dropAction = drag.start(QtCore.Qt.MoveAction) ``` 拖動對象的`start()`方法開始拖放操作。 ```py def mousePressEvent(self, e): QtGui.QPushButton.mousePressEvent(self, e) if e.button() == QtCore.Qt.LeftButton: print 'press' ``` 如果我們用鼠標左鍵單擊按鈕,我們將在控制臺上打印`'press'`。 注意,我們也在父對象上調用了`mousePressEvent()`方法。 否則,我們將看不到按鈕被按下。 ```py position = e.pos() self.btn.move(position) ``` 在`dropEvent()`方法中,我們編碼釋放鼠標鍵并完成放置操作后發生的情況。 我們找出當前鼠標指針的位置并相應地移動一個按鈕。 ```py e.setDropAction(QtCore.Qt.MoveAction) e.accept() ``` 我們指定放置動作的類型。 在我們的情況下,這是一個動作。 PySide 教程的這一部分專門用于拖放。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看