Python PyQt5:使用菜单栏选项向应用程序布局添加小部件

2024-09-29 17:13:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用PyQt5库创建GUI应用程序,该库将矩阵作为输入,并根据用户选择的选项显示乘积或总和

现在,我希望用户选择他们想要做的操作(加法或乘法)的方式是在菜单栏的模式选项卡下选择该选项(我已经在菜单栏中进行了编码)

enter image description here

import sys
from PyQt5 import QtGui,QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Window(QMainWindow):

     def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(100, 100, 596, 226)
        self.setMinimumSize(QtCore.QSize(596, 226))
        self.setMaximumSize(QtCore.QSize(596, 226))
        self.setWindowTitle("Matrix Multiplication")

        # Creating the Menu Bar
        # Defining 'Modes' Menu option
        mainMenu = self.menuBar()
        modeMenu = mainMenu.addMenu("&Mode")

        # Defining options for 'Mode' Menu and adding them under the 'Mode' Menu
        # Matrix Multiplication Mode
        MatrixMultiplication_FileAction = QtWidgets.QAction("&Matrix Multiplication", self)
        MatrixMultiplication_FileAction.setShortcut("Ctrl+M")
        MatrixMultiplication_FileAction.setStatusTip("Activate Matrix Multiplication Module?")
        MatrixMultiplication_FileAction.triggered.connect(self.MatrixMultiplication_FileAction_Action) #todo
        modeMenu.addAction(MatrixMultiplication_FileAction)

        # Matrix Addition Mode
        MatrixAddition_FileAction = QtWidgets.QAction("&Matrix Addition", self)
        MatrixAddition_FileAction.setShortcut("Ctrl+A")
        MatrixAddition_FileAction.setStatusTip("Activate Matrix Addition Module?")
        MatrixAddition_FileAction.triggered.connect(self.MatrixAddition_FileAction_Action) #todo
        modeMenu.addAction(MatrixAddition_FileAction)

        self.statusBar()
        self.statusBar().showMessage("Ready")

        self.show()

        # Intro Message to explain how to use application
        message = QtWidgets.QMessageBox.information(self, "Introduction",
                                                    "Welcome to the Matrixion App\nTo run calculations, click the Menu Bar\nabove and select desired option")

    # Matrix Multiplication Module
    def MatrixMultiplication_FileAction_Action(self):
        self.statusBar().showMessage("Matrix Multiplication Module is Activated")

        # Defining the layout of all objects in Matrix Multiplication Module
        # Defining font for Header
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)

        # Placing Header
        self.label = QtWidgets.QLabel("Matrix Multiplication", self)
        self.WindowHeader.setGeometry(QtCore.QRect(-4, 0, 601, 41))
        self.WindowHeader.setFont(font)
        self.WindowHeader.setAutoFillBackground(True)
        self.WindowHeader.setAlignment(QtCore.Qt.AlignCenter)

        self.show()

    # Matrix Addition Module
    def MatrixAddition_FileAction_Action(self):
        self.statusBar().showMessage("Matrix Addition Module is Activated")
        message = QtWidgets.QMessageBox.critical(self, "Houston, we have a problem!", "This feature hasn't been added yet")


def run():
    app = QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()

我已经在我的_init__(self):函数中使用了self.show(),我在菜单栏中对其进行了编码

我认为在MatrixMultiplication\u FileAction\u Action(self):中再次调用self.show()是个问题,但我无法理解如何使用一个函数来更新GUI(将对象添加到布局中),该函数是在选择菜单栏中的选项时调用的

我可以保证在更新状态提示时,确实会调用函数MatrixMultiplication\u FileAction\u Action(self)。但是,我定义的对象不会出现

也没有错误消息

注意:应用程序还没有完成,如果我能弄清楚如何添加这个标签,我也可以添加其他对象


Tags: theimportselfactionmatrixpyqt5menumodule
1条回答
网友
1楼 · 发布于 2024-09-29 17:13:52

正如它在Qt Main Window Framework中所说的,不支持创建没有中心小部件的主窗口。您必须有一个中心小部件,即使它只是一个占位符为了查看QLabel,构造一个QWidget作为主窗口的中心小部件。您可能还希望使用布局管理器来处理小部件的位置

class Window(QMainWindow):

    def __init__(self):
        ...
        w = QtWidgets.QWidget()
        self.setCentralWidget(w)
        self.grid = QtWidgets.QGridLayout(w)

    def MatrixMultiplication_FileAction_Action(self):
        ...
        self.label = QtWidgets.QLabel("Matrix Multiplication")
        self.grid.addWidget(self.label, 0, 0)

self.grid是指向中央小部件上设置的QGridLayout的指针。因此,在MatrixMultiplication函数中,构造没有父对象的QLabel,然后将其添加到布局中

结果:

enter image description here

相关问题 更多 >

    热门问题