pyqt多窗口设计(2步实现,嘴对嘴教学,源码复制可用)

本文涉及:PyQt5,Qt Designer,PyCharm

 

目录

先看下完成效果: ​​​​​​​

步骤1:用Qt Designer创建2个窗体

步骤2:将子窗体和主窗体上的按钮控件进行关联

完整代码


先看下完成效果: 

        视频里我只设计了1个主窗口和1个子窗口,不管你需要多少个子窗口,其创建方法都是一样的。下面我来介绍一下具体的实现方式。


步骤1:用Qt Designer创建2个窗体

        打开Qt Designer,直接一次性新建2个Main Window窗体,然后在主窗体的中间我放了1个按钮控件,如下图所示:

         然后分别保存2个窗体的.ui文件到同1个文件夹中。注意:在保存时,需要分别将鼠标焦点定位到要保存的窗体上,单独为每个窗体进行保存;而在将.ui文件转化为.py文件时,也需要分别选中每个.ui文件,单独进行转换,完成后如下图所示:


步骤2:将子窗体和主窗体上的按钮控件进行关联

        首先看一下untitled2.py文件,在自动转换后的代码中,默认继承object类,代码如下:

class Ui_MainWindow(object):

        为了执行窗口操作,需要将继承的object类修改为QMainWindow类,由于QMainWindow类位于PyQt5.QtWidgets模块中,因此需要进行导入,修改后的代码如下:

from PyQt5.QtWidgets import QMainWindow

class Ui_MainWindow(QMainWindow):

        修改完子窗体的.py文件中的继承类之后,打开untitled.py主窗体文件,在该文件中,首先定义一个槽函数,用来使用QMainWindow对象的show()方法打开子窗体,代码如下:

        

    def open(self):                                # 创建1个自定义函数open打开子窗体
        import untitled2                           # 导入子窗体
        self.second = untitled2.Ui_MainWindow()    # 引用子窗体,并命名为second
        self.second.resize(736, 467)               # 初始化子窗体大小
        self.second.setWindowTitle("这是子窗体")    # 初始化子窗体的标题
        self.second.show()                         # 显示子窗体

        然后将PushButton按钮的clicked()信号与自定义的槽函数open()关联,代码如下:

self.pushButton.clicked.connect(self.open)

        运行untitled.py主窗体,点击按钮即可打开子窗体。


完整代码

        有不清楚的,可以对照下面源码看一下。

        主窗体源码(untitled.py):

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(750, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 140, 291, 81))
        self.pushButton.setObjectName("pushButton")

        # 将按钮和显示第2个窗口的自定义函数关联
        self.pushButton.clicked.connect(self.open)

        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开新窗口"))

    def open(self):                                     # 创建1个自定义函数open打开子窗体
        import untitled2                                # 导入子窗体
        self.second = untitled2.Ui_MainWindow()         # 引用子窗体,并命名为second
        self.second.resize(736, 467)                    # 初始化子窗体大小
        self.second.setWindowTitle("这是子窗体")         # 初始化子窗体的标题
        self.second.show()                              # 显示子窗体

import sys
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

        子窗体源码(untitled2.py):

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow

class Ui_MainWindow(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(736, 467)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

def __init__(self):
    super(Ui_MainWindow, self).__init__()
    self.setupUi(self)

天冷手寒,码文不易,还望各位看官老爷点一下关注,妾身感激涕零 ~~~

  • 19
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
PyQt5是一个Python的GUI工具包,可以用来创建桌面应用程序。在PyQt5,使用QStackedWidget类可以实现窗口多层界面设计。 QStackedWidget是一个容器控件,它可以容纳一堆widget,每个widget可以看作是一个页面。当需要切换页面时,只需要调整QStackedWidget当前显示的widget即可。 以下是一个简单的示例代码,演示如何使用QStackedWidget实现窗口多层界面设计: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QStackedWidget class MainWindow(QWidget): def __init__(self): super().__init__() # 创建两个页面 self.page1 = QWidget() self.page2 = QWidget() # 在第一个页面添加一个标签和一个按钮 label1 = QLabel("这是第一页") button1 = QPushButton("切换到第二页") button1.clicked.connect(self.switchToPage2) layout1 = QVBoxLayout(self.page1) layout1.addWidget(label1) layout1.addWidget(button1) # 在第二个页面添加一个标签和一个按钮 label2 = QLabel("这是第二页") button2 = QPushButton("切换到第一页") button2.clicked.connect(self.switchToPage1) layout2 = QVBoxLayout(self.page2) layout2.addWidget(label2) layout2.addWidget(button2) # 创建一个QStackedWidget,把两个页面添加到其 self.stackedWidget = QStackedWidget(self) self.stackedWidget.addWidget(self.page1) self.stackedWidget.addWidget(self.page2) # 创建一个水平布局,把QStackedWidget添加进去 layout = QHBoxLayout(self) layout.addWidget(self.stackedWidget) def switchToPage1(self): # 切换到第一页 self.stackedWidget.setCurrentWidget(self.page1) def switchToPage2(self): # 切换到第二页 self.stackedWidget.setCurrentWidget(self.page2) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 这个示例代码,我们创建了一个包含两个页面的窗口应用程序。每个页面都包含一个标签和一个按钮。当点击按钮时,通过QStackedWidget的setCurrentWidget方法切换到另一个页面。 运行这个程序,你会看到一个窗口,上面有一个标签和一个按钮。点击按钮,就可以切换到另一个页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值