python - Menuen i et popup-vindue bliver deaktiveret af central widget

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette et simpelt popup-vindue med en pop-up menu aktiveret med en knap på toppen og en liste i resten af ​​vinduet. Jeg kom op på følgende forenklede kode:


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\_())


Men problemet er, at menupunkterne ikke aktiveres overhovedet, hvis et klik er gjort på den del af menuen inde i vinduet. Udenfor vinduet fungerer det korrekt. Dette problem findes på Windows 7 med Python 3.5.2 og PyQt 5.6.0 installeret via Miniconda. Koden fungerer dog som forventet på Debian GNU/Linux 8 (stabilt) med Python 3.4.2 og PyQt 5.3.2 fra lagerbeholdninger. Det betyder ikke, hvilken widget der er valgt som central.


Er det en god praksis at arrangere widgets på denne måde? Hvad kan der gøres for at løse problemet?

Bedste reference


Det ser ud som om det var en fejl i pyqt 5.6.0-py35\_0, opdatering til py35\_1 hjalp.