2017-01-18 30 views
1

我正在嘗試創建一個簡單的彈出式窗口,其中有一個彈出式菜單,該窗口由頂部按鈕和窗口其餘部分中的列表激活。我想出了以下簡化代碼:彈出窗口中的菜單被中央部件取消激活

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

但問題是,菜單項不是在所有如果點擊該窗口中的菜單的一部分進行激活。在窗口外面它正常工作。在使用Python 3.5.2的Windows 7和通過Miniconda安裝的PyQt 5.6.0上存在此問題。但是,代碼在Debian GNU/Linux 8(穩定版)上使用Python 3.4.2和PyQt 5.3.2從股票庫中按預期工作。無論哪個小部件設置爲中央,都無關緊要。

以這種方式安排小部件是否是一種好習慣?可以做些什麼來解決這個問題?

回答

0

看起來這是pyqt 5.6.0-py35_0中的一個bug,更新到py35_1有所幫助。

相關問題