我正在尝试创建一个简单的弹出窗口,其中弹出菜单由顶部的按钮激活,窗口的其余部分列表。我提出了以下简化代码:
from PyQt5 import QtWidgets, QtCore, QtGui
import sys
class MenuWidget(QtWidgets.QWidget):
def __init__(self, flags=QtCore.Qt.Widget, parent=None):
super().__init__(parent, flags=flags)
self.popup_menu = QtWidgets.QMenu(self)
self.action1 = QtWidgets.QAction('Action1', self)
self.action1.triggered.connect(self.do_action1)
self.action2 = QtWidgets.QAction('Action2', self)
self.action2.triggered.connect(self.do_action2)
self.popup_menu.addAction(self.action1)
self.popup_menu.addAction(self.action2)
self.menu_button = QtWidgets.QToolButton(self)
self.menu_button.setMenu(self.popup_menu)
self.menu_button.setPopupMode(QtWidgets.QToolButton.InstantPopup)
self.label = QtWidgets.QLabel('test')
self.layout = QtWidgets.QHBoxLayout()
self.layout.addWidget(self.label, 1)
self.layout.addWidget(self.menu_button)
self.setLayout(self.layout)
def do_action1(self):
print('Doing action1')
def do_action2(self):
print('Doing action2')
class MenuTesting(QtWidgets.QMainWindow):
def __init__(self, flags=QtCore.Qt.Window, parent=None):
super().__init__(parent, flags=flags)
self.setWindowFlags(QtCore.Qt.Popup)
self.tester = MenuWidget(parent=self)
self.setMenuWidget(self.tester)
self.somelist = QtWidgets.QListWidget(parent=self)
self.setCentralWidget(self.somelist)
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = MenuTesting()
sys.exit(app.exec_())
但问题是,如果在窗口内部的菜单部分进行了单击,则根本不会激活菜单项。在窗外,它可以正常工作。 Windows 7上存在此问题,通过Miniconda安装了Python 3.5.2和PyQt 5.6.0。但是,代码在Debian GNU / Linux 8(稳定版)上使用Python 3.4.2和PyQt 5.3.2从库存库中按预期工作。将哪个窗口小部件设置为中心无关紧要。
以这种方式安排小部件是一种好习惯吗?如何解决问题呢?
答案 0 :(得分:0)
看起来这是pyqt 5.6.0-py35_0中的一个错误,对py35_1的更新有帮助。