Python PyQt5:使用菜单栏选项将小部件添加到应用布局中

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

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

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS95bW5UdC5wbmcifQ==” alt =“在此处输入图像说明”>

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_FileAction_Action(self)中再次调用self.show()的问题,但我无法理解如何使用从菜单选项中调用的函数来更新GUI(将对象添加到布局)选择菜单栏。

我可以确保在状态提示更新时确实调用了MatrixMultiplication_FileAction_Action(self)函数。但是,我定义的对象没有出现。

也没有错误消息。

注意:应用程序不完整,如果我能弄清楚如何添加此标签,也可以添加其他对象

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

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

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