#python #pyqt #pyqt4
#python #pyqt #pyqt4
Вопрос:
У меня есть ряд кнопок, каждая из которых может принимать капли. Однако, когда я оставляю кнопку с курсором при перетаскивании другой кнопки, ‘dragLeaveEvent’ не вызывается.
class Button(QtGui.QPushButton):
def __init__(self):
super(Button, self).__init__()
self.setAcceptDrops(True)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
drag = QtGui.QDrag(self)
mime = QtCore.QMimeData()
mime.setText("f")
drag.setMimeData(mime)
drag.exec_()
def dragEnterEvent(self, event):
print "enter"
def dragLeaveEvent(self, event):
print "leave"
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.mainLayout = QtGui.QVBoxLayout()
self.setLayout(self.mainLayout)
for i in range(10):
btn = Button()
self.mainLayout.addWidget(btn)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
Комментарии:
1. используете ли вы
Python 2
?Python 3
потребуетсяprint("enter")
ли с()
?2. Python 2. В любом случае, я бы получил сообщение об ошибке, если бы код достиг этой части с помощью Py3….
Ответ №1:
Как указано в документации об dragEnterEvent()
отчетах (это из Qt5, но то же самое было справедливо и для Qt4):
Если событие игнорируется, виджет не получит никаких событий перетаскивания.
Примечание: любые события перетаскивания
перемещаются. Это также означает события удаления.
По умолчанию все события перетаскивания игнорируются для большинства виджетов, если событие ввода перетаскивания не принято, поэтому, если вы хотите получать все события (включая событие leave ), это первое событие должно быть принято.
class Button(QtGui.QPushButton):
# ...
def dragEnterEvent(self, event):
event.accept()
print "enter"