如何从菜单中调用PyQT5新的(弹出)窗口?

问题描述 投票:0回答:1

我为Python初学者。如何调用从菜单的弹出(新的)窗口?我知道如何与菜单操作。任何示例代码理解。

下面是菜单的示例代码。如何触发从菜单弹出窗口的动作?

import sys
import PyQt5.QtGui as Gui
import PyQt5.QtWidgets as Wid
import PyQt5.QtCore as Cor 

class winTable(Wid.QMainWindow):
def __init__(self, parent=None):
super(winTable, self).__init__(parent);
self.title = "Table";
self.top = 150;
self.left = 300;
self.width = 870;
self.height = 500;
self.setWindowTitle (self.title);
self.setGeometry (self.left, self.top, self.width, self.height); 

class mainWindow(Wid.QMainWindow):
def __init__(self, parent=None):
super(mainWindow, self).__init__(parent);
self.qtMenu();
def qtMenu(self):

mainMenu = self.menuBar();
pyGuiMenu = mainMenu.addMenu('File'); 

subItemTable = Wid.QAction('New', self);
subItemTable.setShortcut("Ctrl+N");
subItemTable.setStatusTip("New Window");
pyGuiMenu.addAction(subItemTable); 

subItemExit = Wid.QAction('Exit', self);
subItemExit.setShortcut("Ctrl+E");
subItemExit.setStatusTip("Exit Application");
subItemExit.triggered.connect(self.close_App);
pyGuiMenu.addAction(subItemExit);

def close_App(self):
reply = Wid.QMessageBox.question(self, "Exit Application", "Are you sure to close the window?", Wid.QMessageBox.Yes | Wid.QMessageBox.No, Wid.QMessageBox.No);
if reply == Wid.QMessageBox.Yes:
   sys.exit(); 

def main():
App = Wid.QApplication(sys.argv);
homeWin = mainWindow();   
homeWin.title = "Trial GUI";
homeWin.iconname = "pylogo.png";
homeWin.top = 250;
homeWin.left = 400;
homeWin.width = 870;
homeWin.height = 500;
homeWin.setWindowTitle (homeWin.title);
homeWin.setGeometry (homeWin.left, homeWin.top, homeWin.width, homeWin.height);
homeWin.setWindowIcon (Gui.QIcon(homeWin.iconname));
homeWin.show();
sys.exit(App.exec_()); 

if __name__ == "__main__":
main();`

如何触发从菜单弹出窗口的动作?

python-3.x pyqt5
1个回答
0
投票

试试吧:

import sys
import PyQt5.QtGui     as Gui
import PyQt5.QtWidgets as Wid
import PyQt5.QtCore    as Cor 

class WinTable(Wid.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.title = "Table"
        self.top    = 150
        self.left   = 300
        self.width  = 870
        self.height = 500
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height) 

class mainWindow(Wid.QMainWindow):
    def __init__(self, parent=None):
        super(mainWindow, self).__init__(parent)

        self.qtMenu()

    def qtMenu(self):
        mainMenu = self.menuBar()
        pyGuiMenu = mainMenu.addMenu('File')

        subItemTable = Wid.QAction('New', self)
        subItemTable.setShortcut("Ctrl+N")
        subItemTable.setStatusTip("New Window")

        subItemTable.triggered.connect(self.newWindow)     # +++

        pyGuiMenu.addAction(subItemTable) 

        subItemExit = Wid.QAction('Exit', self)
        subItemExit.setShortcut("Ctrl+E")
        subItemExit.setStatusTip("Exit Application")
        subItemExit.triggered.connect(self.close_App)
        pyGuiMenu.addAction(subItemExit);

    def close_App(self):
        reply = Wid.QMessageBox.question(
            self, 
            "Exit Application", 
            "Are you sure to close the window?", 
            Wid.QMessageBox.Yes | Wid.QMessageBox.No, 
            Wid.QMessageBox.No
        )
        if reply == Wid.QMessageBox.Yes:
           sys.exit()

    def newWindow(self):                                    # +++
        print('def newWindow(self):')    
        self.winTable = WinTable()
        self.winTable.show()


def main():
    App = Wid.QApplication(sys.argv)
    homeWin = mainWindow()   
    homeWin.setWindowTitle("Trial GUI")
    homeWin.setGeometry (250, 200, 870, 500);
    homeWin.setWindowIcon (Gui.QIcon("D:/_Qt/img/pyqt.jpg"));
    homeWin.show();
    sys.exit(App.exec_()); 

if __name__ == "__main__":
    main()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.