2016-10-12 71 views
1

我想創建一個函數來構建一個可以動態添加到窗口菜單欄的上下文菜單。請看下面的小例子,添加一個簡單的QMenu:當setParent調用時,QMenu顯示不正確

from PyQt5 import QtWidgets 

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, *args, **kwargs): 
     super(MainWindow, self).__init__(*args, **kwargs) 
     menu = QtWidgets.QMenu('Menu', parent=self) 
     act1 = menu.addAction('Action 1') 
     act2 = menu.addAction('Action 2') 
     self.menuBar().addMenu(menu) 

app = QtWidgets.QApplication([]) 
window = MainWindow() 
window.show() 
app.exec_() 

enter image description here

可正常工作。請注意,需要設置QMenu的父級以顯示。


現在,如果我將菜單代碼分解成自己的函數並明確設置父項,我會得到以下內容。 這是怎麼回事?

from PyQt5 import QtWidgets 

def createMenu(): 
    menu = QtWidgets.QMenu('Menu') 
    act1 = menu.addAction('Action 1') 
    act2 = menu.addAction('Action 2') 
    return menu 

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, *args, **kwargs): 
     super(MainWindow, self).__init__(*args, **kwargs) 
     menu = createMenu() 
     menu.setParent(self) 
     self.menuBar().addMenu(menu) 

app = QtWidgets.QApplication([]) 
window = MainWindow() 
window.show() 
app.exec_() 

enter image description here

回答

3

你打電話setParent的方式重置窗口標誌,所以做這個:

menu.setParent(self, menu.windowFlags()) 
+0

的偉大工程。我不知道有一個重載的'setParent'函數 – user3419537