gpt4 book ai didi

python - 如何使用 PyQt 在窗口中切换布局? (不关闭/打开 window )

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:48 26 4
gpt4 key购买 nike

我目前正在尝试使用 python 和 PyQt4(不是 Qt Designer)创建一个程序。我创建了一个登录类 (QDialog) 和一个主页类 (QMainWindow)。但是,因为我的程序将包含大量页面(程序中的导航会很大),所以我想知道如何在 QMainWindow 中切换布局,而不是不断地创建新窗口并关闭旧窗口。例如,我会将 MainWindow ('HomePage') 布局设置为登录后的默认屏幕,然后在 MainWindow 中有一个子类,它允许我导航到用户设置(或任何其他页面)。有没有办法将 MainWindow 布局交换为用户设置布局,而不是创建一个新窗口并关闭 MainWindow? (如果这没有意义,我深表歉意,我是 PyQt 的新手)。示例代码如下所示(五.基本代码)

-------------------------------------------- ----------------------------------

import sys     
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MainWindow(QMainWindow):
#Constructor
def __init__(self):
super(MainWindow, self).__init__() #call super class constructor

button1 = QPushButton("User Settings", self)
button1.clicked.connect(UserSelection)
button1.resize(50,50)
button1.move(350,50)

self.show()

class UserSelection(?):
...

def main():
app = QApplication(sys.argv) #Create new application
Main = MainWindow()
sys.exit(app.exec_()) #Monitor application for events

if __name__ == "__main__":
main()

最佳答案

from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
login_widget = LoginWidget(self)
login_widget.button.clicked.connect(self.login)
self.central_widget.addWidget(login_widget)
def login(self):
logged_in_widget = LoggedWidget(self)
self.central_widget.addWidget(logged_in_widget)
self.central_widget.setCurrentWidget(logged_in_widget)


class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Login')
layout.addWidget(self.button)
self.setLayout(layout)
# you might want to do self.button.click.connect(self.parent().login) here


class LoggedWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoggedWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.label = QtGui.QLabel('logged in!')
layout.addWidget(self.label)
self.setLayout(layout)



if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()

关于python - 如何使用 PyQt 在窗口中切换布局? (不关闭/打开 window ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com