我正在尝试使用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)函数。但是,我定义的对象没有出现。
也没有错误消息。
注意:应用程序不完整,如果我能弄清楚如何添加此标签,也可以添加其他对象
如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,然后将其添加到布局中。
结果: