我正在用 Python 为一个大学项目创建一个 PyQt5 应用程序,用于QStackedLayout
使其成为单窗口应用程序,但是,我不知道如何将 Stacked Widget 嵌套在 Stacked Widget 中。
运行代码时(因问题而降级),您可以看到带有 a 的主菜单QPushButton
。单击它时,窗口会随着其中的 a而变化QListWidget
。
我想要实现的是 右侧的 Stacked Widget QListWidget
,它分别随所选列表项而变化。
编辑:有没有一种方法可以打开另一个窗口所在的位置?现在,每当我单击一个按钮时,都会在屏幕中间弹出窗口。
在代码中,您可以看到我尝试实现的部分带有注释字符。
编码:
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow,
QLabel, QPushButton, QWidget,
QStackedLayout, QListWidget)
from PyQt5.QtCore import QRect, Qt
class Ui(QWidget):
def setupUi(self, Main):
Main.setObjectName("Main")
Main.setFixedSize(900, 500)
self.width = 900
self.height = 500
self.setFixedSize(self.width, self.height)
'''MENU ON THE MAIN WINDOW'''
self.menu = QStackedLayout()
self. mainMenu = QWidget()
self.howToMenu = QWidget()
self. mainMenuUi()
self.howToMenuUi()
self.menu.addWidget(self. mainMenu)
self.menu.addWidget(self.howToMenu)
'''MENU ON THE HOWTO WINDOW'''
#self.howToMenuMenu = QStackedLayout()
#self.howToOverView = QWidget()
#self.howToLevel = QWidget()
#self.howToTapeMeasure = QWidget()
#self.howToTheodolite = QWidget()
#self. overViewUi()
#self. levelUi()
#self.tapeMeasureUi()
#self. theodoliteUi()
#self.howToMenuMenu.addWidget(self.howToOverView )
#self.howToMenuMenu.addWidget(self.howToLevel )
#self.howToMenuMenu.addWidget(self.howToTapeMeasure)
#self.howToMenuMenu.addWidget(self.howToTheodolite )
def mainMenuUi(self):
self.mainMenu.setFixedSize(self.width, self.height)
self.mainMenuText = QLabel(self.mainMenu)
self.mainMenuText.setGeometry(QRect(30, 120, 480, 200))
self.mainMenuText.setStyleSheet("font: 14pt Century Gothic")
self.mainMenuText.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)
self.mainMenuText.setText("Welcome to the Surveying Traverse Calculator!")
self.howToButton = QPushButton("HOW TO DO A TRAVERSE", self.mainMenu)
self.howToButton.setGeometry(140, 180, 200, 30)
def howToMenuUi(self):
self.howToMenu.setFixedSize(self.width, self.height)
self.menuButton1 = QPushButton("Back to main menu", self.howToMenu)
self.menuButton1.setGeometry(QRect(10, 10, 200, 30))
self.howToTitle = QLabel(self.howToMenu)
self.howToTitle.setGeometry(QRect(10, 50, self.width, 40))
self.howToTitle.setStyleSheet("font: 14pt Century Gothic")
self.howToTitle.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.howToTitle.setText("How to Do a Traverse")
self.howToSteps = QListWidget(self.howToMenu)
self.howToSteps.setGeometry(QRect(10, 100, 200, 80))
self.howToSteps.insertItem(0, "OVERVIEW" )
self.howToSteps.insertItem(1, "LEVEL" )
self.howToSteps.insertItem(2, "TAPE MEASURE")
self.howToSteps.insertItem(3, "THEODOLITE" )
#def overViewUi(self):
#def levelUi(self):
#def tapeMeasureUi(self):
#def theodoliteUi(self)
class Main(QMainWindow, Ui):
def __init__(self):
super(Main, self).__init__()
self.setupUi(self)
self.menuButton1.clicked.connect(self. menuWindow)
self.howToButton.clicked.connect(self.howToWindow)
def menuWindow(self):
self.menu.setCurrentIndex(0)
def howToWindow(self):
self.menu.setCurrentIndex(1)
if __name__ == "__main__":
app = QApplication(sys.argv)
M = Main()
sys.exit(app.exec())
我该如何解决这个问题?