3
請考慮以下最簡單的示例。如何在下拉代碼中的註釋中指出在放置事件期間按下修飾鍵時如何修改它,以及是否執行其他操作。假設你從鸚鵡螺或類似的東西中刪除一個文件到我的例子中。使用修改鍵在pyqt4中拖放
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyDropLabel(QLabel):
myDroppedSignal = pyqtSignal(str)
myDroppedSignalModified = pyqtSignal()
def __init__(self,text):
super(MyDropLabel, self).__init__(text)
self.setAcceptDrops(True)
def dragMoveEvent(self, e):
e.accept()
def dragEnterEvent(self, e):
e.accept()
def dropEvent(self, e):
if e.mimeData().hasUrls():
s = e.mimeData().urls()[0].path()
self.myDroppedSignal.emit(s)
e.accept()
##if a modifier key, for example shift or ctrl was pressed to something else and emit myDroppedSignalModified
class MyWidget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.hlayout = QHBoxLayout()
self.setLayout(self.hlayout)
self.label = MyDropLabel("Drop something here")
self.hlayout.addWidget(self.label)
#self.setCentralWidget(self.label)
self.label.myDroppedSignal.connect(self.myDroppedHandler)
def myDroppedHandler(self,s):
self.label.setText(QString(s))
if __name__ == "__main__":
app = QApplication(sys.argv)
da = MyWidget()
da.show()
sys.exit(app.exec_())
謝謝,但我想我需要一些更多的細節,因爲我是一個初學者。你能用我最小的例子來實現你的想法嗎? – student
@student結帳[我的回覆](http://stackoverflow.com/a/14022417/1006989),我添加了一個例子,將說明它 – 2012-12-24 16:16:21
謝謝,我試了一下,並修改它爲我的實際代碼,它工作得很漂亮好。由於我是一名pyqt4初學者,並且想要學習新的東西,所以如果你能夠更詳細地解釋你的例子中的@ pyqtSlot這個東西,那將是非常好的。 – student