当前位置: 首页 > 面试题库 >

如何使用PyQt在窗口中切换布局?(没有关闭/打开窗口)

卜鹏
2023-03-14
问题内容

我目前正在尝试使用python和PyQt4(不是Qt
Designer)创建程序。我创建了一个登录类(QDialog)和一个主页类(QMainWindow)。但是,由于我的程序将由页面负荷组成(通过该程序的导航很大),我想知道如何在QMainWindow中切换布局,而不是不断创建新窗口并关闭旧窗口。例如,登录后我会将MainWindow(’HomePage’)布局设置为默认屏幕,然后在MainWindow中具有一个子类,该子类允许我导航到用户设置(或任何其他页面)。除了创建新窗口并关闭MainWindow之外,我还可以将MainWindow布局交换为User
Setting布局吗?(如果这没有道歉,对PyQt来说是新的)。下面显示了示例代码(V.基本代码)

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_()


 类似资料:
  • 新窗口打开链接 该方法可以新起webview打开页面,由于客户端窗口过多会占用较多内存,请谨慎使用 Tida.pushWindow("http://www.tmall.com/go/chn/common/u-award.php?disableptf=1"); 关闭窗口 关闭当前webview窗口 Tida.popWindow();

  • 我正在IE上测试。单击后,我切换到子窗口,但无法返回父窗口,出现错误“窗口已关闭”。

  • 问题内容: 我正在尝试用Java(仅我知道的语言,我刚刚学习线程)创建一个自动单击器。我希望在其自己的窗口(而不是在网页上)中打开小程序,并且希望能够在不选择窗口的情况下使用空格键启动和停止该程序,以便可以在其他程序上使用自动单击器并能够停止它而无需alt-f4一堆东西。 您有什么可以推荐我的,可以帮助我实现这一目标的吗?或您有什么建议吗? 问题答案: 这可能超出了Java小程序的范围。实际上,全

  • 脚本: 单击父窗口中的审核按钮 子窗口已加载 将控件切换到子窗口 单击子窗口中的“确定”按钮 窗口关闭 从父窗口继续测试 在这里,我面临的挑战是在单击“确定”按钮后切换到父窗口。当窗户关闭时。 硒网络驱动程序:2.48

  • pre { white-space: pre-wrap; } Layout 组件可以内嵌在窗口(window)中。我们可以创建一个复杂的布局窗口,甚至不需要写任何的 js 代码。jquery-easyui 框架帮我们在后台做渲染和调整尺寸。 作为一个实例,我们创建一个窗口(window),它包含两个部分,一个放置在左边一个放置在右边。在窗口(window)的左边我们创建一个树形菜单(tree),在