PyQt5 拖放
與任何現代 GUI 工具包一樣,PyQt5 支援拖放。必須使用 setDragEnabled(True)
方法呼叫設定 widget 引數。然後應將自定義視窗小控制元件設定為接受帶有 setAcceptDrops(True)
的拖放。
![PyQt5 拖放](/img/Tutorial/PyQt5/PyQt5 Drag and Drop.png)
PyQt5 拖放示例
將文字從輸入欄位拖到標籤,標籤將更新其文字。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 drag and drop - tastones.com'
self.left = 10
self.top = 10
self.width = 320
self.height = 60
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
editBox = QLineEdit('Drag this', self)
editBox.setDragEnabled(True)
editBox.move(10, 10)
editBox.resize(100,32)
button = CustomLabel('Drop here.', self)
button.move(130,15)
self.show()
@pyqtSlot()
def on_click(self):
print('PyQt5 button click')
class CustomLabel(QLabel):
def __init__(self, title, parent):
super().__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())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
使用呼叫 QLineEdit()
建立文字框。建立一個接受拖放的自定義類 CustomLabel
。這兩個事件都被定義為方法,並在事件發生時執行其邏輯。