所以基本上我有一个带有多个按钮的主菜单,当点击一个按钮时,它应该将布局更改为新窗口。这样可以正常工作,但是当我使用新窗口上的返回按钮单击时,当我单击主菜单上的另一个按钮时,它会将我带回到第一个单击的按钮。
我是一个完整的菜鸟,代码是如此粗糙,只是一种练习,但我无法弄明白!!!
(尽量不要嘲笑它只是一个测试应用程序的代码/变量
我编写了2个按键来工作:
def Layout(self):
verticle = QVBoxLayout()
Horizontal = QHBoxLayout()
Horizontal_pic = QHBoxLayout()
self.btn_feed = QPushButton("Feed")
self.btn_status = QPushButton("Status")
self.btn_play = QPushButton("Play")
self.btn_fight = QPushButton("Fight")
Horizontal.addWidget(self.btn_feed)
Horizontal.addWidget(self.btn_status)
Horizontal.addWidget(self.btn_play)
Horizontal.addWidget(self.btn_fight)
self.pic = QLabel()
self.pixmap = QPixmap("{0:^10}".format("charmander.png"))
pixmap = self.pixmap.scaledToHeight(344)
self.pic.setPixmap(pixmap)
self.btn = QLabel(" ")
Horizontal_pic.addWidget(self.btn)
Horizontal_pic.addWidget(self.pic)
Horizontal_pic.addWidget(self.btn)
verticle.addLayout(Horizontal_pic)
verticle.addLayout(Horizontal)
self.mainwindow = QWidget()
self.mainwindow.setLayout(verticle)
self.setGeometry(700, 300, 500, 500)
self.btn_status.clicked.connect(self.statusbutton) #button 1
self.btn_feed.clicked.connect(self.feedbutton) # button 2
def statusbutton(self):
self.Status()
self.stacked.addWidget(self.statuslayout)
self.stacked.setCurrentIndex(1)
以下是调用布局的方法
def statusbutton(self):
self.Status()
self.stacked.addWidget(self.statuslayout)
self.stacked.setCurrentIndex(1)
def feedbutton(self):
self.Feed()
self.stacked.addWidget(self.feedlayout)
self.stacked.setCurrentIndex(1)
def mainlayout(self):
self.Layout()
self.stacked.addWidget(self.mainwindow)
self.stacked.setCurrentIndex(0)
这是它改为
的布局/窗口 def Status(self):
font = QFont("Comic Sans MS",15)
Overall = QHBoxLayout()
horz1 = QHBoxLayout()
horz2 = QHBoxLayout()
horz3 = QHBoxLayout()
self.pic = QLabel()
pixmap = self.pixmap.scaledToWidth(250)
self.pic.setPixmap(pixmap)
verticlepic = QVBoxLayout()
verticlepic.addWidget(self.pic)
lbl_hunger = QLabel("Hunger ")
lbl_hunger.setFont(font)
lbl_age = QLabel("Age ")
lbl_age.setFont(font)
lbl_attack = QLabel("Attack ")
lbl_attack.setFont(font)
horz1.addWidget(lbl_hunger)
horz1.addWidget(QLineEdit(str(self.hunger)))
horz2.addWidget(lbl_age)
horz2.addWidget(QLineEdit(str(self.age)))
horz3.addWidget(lbl_attack)
horz3.addWidget(QLineEdit(str(self.attack)))
vertall = QVBoxLayout()
vertall.addLayout(horz1)
vertall.addLayout(horz2)
vertall.addLayout(horz3)
Overall.addLayout(verticlepic)
Overall.addLayout(vertall)
under_button = QVBoxLayout()
rtrn_button = QPushButton("Return")
under_button.addWidget(rtrn_button)
under_button.addLayout(Overall)
self.statuslayout = QWidget()
self.statuslayout.setLayout(under_button)
self.setGeometry(700, 300, 500, 75)
rtrn_button.clicked.connect(self.mainlayout)
def Feed(self):
horizontal = QHBoxLayout()
self.pic = QLabel()
pixmap = self.pixmap.scaledToWidth(250)
self.pic.setPixmap(pixmap)
feed_btn = QPushButton("Feed")
go_back = QPushButton("Go Back")
horizontal.addWidget(feed_btn)
horizontal.addWidget(self.pic)
horizontal.addWidget(go_back)
self.feedlayout = QWidget()
self.feedlayout.setLayout(horizontal)
self.setGeometry(700, 300, 500, 50)
go_back.clicked.connect(self.mainlayout)
答案 0 :(得分:0)
首先,只做一次:
self.stacked.addWidget(self.mainwindow)
self.stacked.addWidget(self.statuslayout)
self.stacked.addWidget(self.feedlayout)
然后使用这些索引调用布局方法:
self.stacked.setCurrentIndex(0) # for mainwindow
self.stacked.setCurrentIndex(1) # for statuslayout
self.stacked.setCurrentIndex(2) # for feedlayout
问题是什么:
您将mainwindow
添加到位置0的stacked
,然后设置:self.stacked.setCurrentIndex(0)
,这很好
您打开,例如statuslayout
已添加到位置1到stacked
,然后将其设置为self.stacked.setCurrentIndex(1)
,这也很好
关闭statuslayout
,mainwindow
再次添加到stacked
,这次是在位置2,但是您设置的小部件的索引为0,这也是mainwindow
,所以这将起作用
在此步骤中,您按哪个按钮并不重要,例如它可能是feedlayout
:它已在第3位添加到stacked
,但是您设置self.stacked.setCurrentIndex(1)
,因此statuslayout
设置为statuslayout
,因为stecked
位于{{1}}的第1位。