Почему вызывается событие mouseMoveEvent при клике на ComboBox?
При воспроизведении данного примера на Python 3.8 32bit (PyQt 5.14.1) событие mouseMoveEvent срабатывает. А на Python 3.8 64bit (PyQt 5.14.1) - не срабатывает, как и должно. Версии PyQt одинаковые. С чем это может быть связано и как лечить?
import sys
from PyQt5.Qt import *
class Demo(QWidget):
def __init__(self):
super().__init__()
vbox = QHBoxLayout(self)
cb = QComboBox()
cb.addItem("Первый")
cb.addItem("Второй")
vbox.addWidget(cb)
def mouseMoveEvent(self, event):
print(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Demo()
w.resize(300, 200)
w.show()
sys.exit(app.exec_())
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
я не смог смоделировать то, что вы описываете. Запустите мой пример и понаблюдайте, что у вас происходит.
import sys
from PyQt5.Qt import *
class Demo(QWidget):
def __init__(self):
super().__init__()
self.cb = QComboBox() # + self.
self.cb.addItem("Первый")
self.cb.addItem("Второй")
vbox = QHBoxLayout(self)
vbox.addWidget(self.cb)
self.cb.installEventFilter(self) # +
self.cb_flag = False # +
def mouseMoveEvent(self, event):
if not self.cb_flag: # +
print(event.globalPos())
def eventFilter(self, obj, event): # +++
if obj == self.cb and event.type() == QEvent.Enter:
self.cb_flag = True
print(f'1 eventFilter {self.cb_flag}')
elif obj == self.cb and event.type() == QEvent.Leave:
self.cb_flag = False
print(f'22 eventFilter {self.cb_flag} --- {event.type()}')
else:
print(f'333 eventFilter {self.cb_flag} --- {event.type()}')
return super().eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Demo()
w.resize(300, 200)
w.show()
sys.exit(app.exec_())
Автор решения: WD_KMS
→ Ссылка
Решил проблему таким образом:
def __init__(self):
self.pressing = True
def mousePressEvent(self, event):
self.start = event.globalPos()
self.pressing = True
def mouseMoveEvent(self, event):
if self.pressing:
print(event)
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
