1

前两天,为了开发一个课程项目,我开始学习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”)时,我们要打开一个新窗口。我们坚持这一步......在这种情况下有什么想法可以帮助我们吗?

4

1 回答 1

1

您必须学习的第一件事是,在 PyQt 中,您应该尝试异步执行所有操作,因为您必须使用信号,这些信号是在事件发生时发出的,在您的特定情况下,每次按下QAction触发信号时,您必须将此信号连接到事件发生时要调用的某个函数,在 PyQt 中,该函数称为 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_()

...
于 2018-04-15T22:59:41.063 回答