Advertisement
Guest User

QPushButtons don't get Leave event when menu is displayed

a guest
Feb 20th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.32 KB | None | 0 0
  1. import sys
  2.  
  3. from PyQt5 import QtCore, QtGui, QtWidgets
  4.  
  5. # When a QPushButton widget is clicked, its menu (if set) is displayed as a
  6. # modal popup. However, a Leave event is not being send to the button. From the
  7. # button point of view, the mouse pointer is, and will always be, inside the
  8. # widget.
  9. #
  10. # In this simple example, logging has added some to monitor what events are
  11. # being sent to the button when the menu is displayed.
  12.  
  13. def typeToStr(eventType):
  14.     for attr in dir(QtCore.QEvent):
  15.         if getattr(QtCore.QEvent, attr) == eventType:
  16.             return attr
  17.     return "Unknown ( " + str(eventType) + ")"
  18.  
  19.  
  20. class PushButton(QtWidgets.QPushButton):
  21.     def event(self, event):
  22.         print(typeToStr(event.type()), event)
  23.         return super(PushButton, self).event(event)
  24.  
  25.  
  26. class Widget(QtWidgets.QWidget):
  27.     def __init__(self, parent=None):
  28.         super(Widget, self).__init__(parent)
  29.  
  30.         menu = QtWidgets.QMenu()
  31.         for i in range(3):
  32.             menu.addAction("Action " + str(i + 1))
  33.  
  34.         button = PushButton("Button with menu", self)
  35.         button.setFlat(True)
  36.         button.setMenu(menu)
  37.         button.setGeometry(20, 20, 200, 40)
  38.  
  39.  
  40. app = QtWidgets.QApplication(sys.argv)
  41. emptyTab = Widget()
  42. emptyTab.setGeometry(1300, 600, 300, 100)
  43. emptyTab.show()
  44. app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement