PyQT5 当我们点击一​​个对象到菜单栏时我们要打开一个新的window

PyQT5 when we click an object to a menu bar we want to open a new window

两天前,我开始学习python以开发课程项目。我们和我的团队一起编写了下面的代码。是一个简单的第一个屏幕,包含一个图像、两个标签和一个菜单栏。

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QMenu, QLabel, QTextEdit
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5 import QtCore

class Example(QMainWindow):    
    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):         


        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480

        menubar = self.menuBar()
        #MEnubar horizontal
        fileMenu = menubar.addMenu('Indoor Models')
        fileMenu2 = menubar.addMenu('Outdoor Models')
        fileMenu3 = menubar.addMenu('Report')
        fileMenu4 = menubar.addMenu('About')


       #menubar vertical column 1

        newAct = QAction('Free Space Lost', self)
        newAct2 = QAction('Okumura', self)
        newAct3 = QAction('Hata', self)
        newAct4 = QAction('COST 211', self)

        fileMenu.addAction(newAct)
        fileMenu.addAction(newAct2)
        fileMenu.addAction(newAct3)
        fileMenu.addAction(newAct4)

        #menubar vertical column 2

        newAct = QAction('Okumura', self)
        newAct2 = QAction('Okumura', self)
        newAct3 = QAction('Hata', self)
        newAct4 = QAction('COST 211', self)

        fileMenu2.addAction(newAct)
        fileMenu2.addAction(newAct2)
        fileMenu2.addAction(newAct3)
        fileMenu2.addAction(newAct4)

        self.setGeometry(300, 100, 800, 600) 

        #stylesheet LABEL HEADER
        self.setStyleSheet("QLabel {color: #3391EF; qproperty-alignment: AlignCenter}")

        label = QLabel('<font size=14><strong>Propagation Models</strong></font>', self)
        label.setGeometry(QtCore.QRect(230, 40, 300, 100))


        #LABEL FOR IMAGE
        label2 = QLabel(self)
        label2.setGeometry(QtCore.QRect(140, 140, 500, 200))
        pixmap = QPixmap('1.png')
        label2.setPixmap(pixmap)

        label3 = QLabel('<font size=14><strong><u>Description</u></strong></font>', self)
        label3.setGeometry(QtCore.QRect(230, 350, 300, 100))



        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

下一步是当我们点击一​​个对象到菜单栏时(例如"Hata"),我们要打开一个新的window。我们坚持了这一步......在这种情况下有什么想法可以帮助我们吗?

您必须学习的第一件事是,在 PyQt 中,您应该尝试异步执行所有操作,因为您必须使用信号,这些信号在事件发生时发出,在您的特定情况下,每次按下 QAction 触发信号被发出,你必须把这个信号连接到你想在事件发生时调用的某个函数,在 PyQt 中这个函数叫做 Slot。在那个 Slot 中,你必须完成你想要的任务,在这种情况下,我将显示 QDialog:

class Example(QMainWindow):    
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):         
        ...

        self.show()

        newAct3.triggered.connect(self.on_triggered)

    @QtCore.pyqtSlot()
    def on_triggered(self):
        w = QDialog(self)
        w.resize(640, 480)
        w.exec_()

...