多窗口之间的跳转 在designer中设计多个窗口

要想能跳转,当然得有多个窗口,所以我们在designer中再设计一个窗口,当我们点击主界面的登录按钮时,跳转到这个窗口。
方法还是一样的,拖动控件,设计好后保存为.ui文件,然后将.ui文件转换成.py文件。

通过信号和槽将他们连接起来
什么是信号,槽?
这是designer的一个特色,用户对窗口的操作会发送信号,信号指引槽函数去完成相应的动作。太抽象,举个例子。
主窗口的代码是这样的。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'csdn_article.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(160, 265, 81, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(280, 190, 231, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(150, 190, 91, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(280, 270, 231, 31))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 30, 721, 91))
        font = QtGui.QFont()
        font.setFamily("隶书")
        font.setPointSize(18)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(250, 350, 201, 71))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.close_window)#关闭登录窗口
        self.pushButton.clicked.connect(self.open)#实现跳转的信号语句

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        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.label_3.setText(_translate("MainWindow", "密码"))
        self.label_2.setText(_translate("MainWindow", "用户名"))
        self.label.setText(_translate("MainWindow", "通往新世界的大门已经打开,各位勇士你们准备好了吗"))
        self.pushButton.setText(_translate("MainWindow", "登录"))

    def open(self,m):
        import tiaozhuan      #调用tiaozhuan.py
        self.m = tiaozhuan.Ui_MainWindow()  #实例化tiaozhuan.py中的Ui_MainWindow类
        self.m.show()#show()方法显示窗口

    def close_window(self):
        MainWindow.close()#关闭的时候要用窗口的实例化对象来关闭,不能用self

import sys
if __name__ == '__main__':
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
   ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
   ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
   MainWindow.show() # 显示窗体
   sys.exit(app.exec_()) # 程序关闭时退出进程

上面我们完成窗口跳转的语句是这样的。

信号

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

槽函数

    def open(self,m):
        import tiaozhuan
        self.m = tiaozhuan.Ui_MainWindow()
        self.m.show()

所以我们要完成跳转,得经历下面几步:

1.添加信号与槽
在需要添加信号的控件上,添加语句。比如我们在object name 为pushButton的登录按钮上添加信号,连接到open()槽函数,open槽函数的作用是打开新窗口。

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

self : 代表Ui_MainWindow的实例化对象
pushbutton : 登录按钮的object name
clicked : 信号意思是当用户点击登录按钮时将信号发送给槽函数
connect : 信号和槽函数的连接语法
open :槽函数,即接收到信号后调用该函数

 def open(self,m):
        import tiaozhuan   #调用tiaozhuan.py
        self.m = tiaozhuan.Ui_MainWindow()#实例化tiaozhuan.py中的Ui_MainWindow类
        self.m.show()#show()方法显示窗口

import tiaozhuan : tiaozhuan是新窗口的名称,tiaozhuan.py。
另外,在打开新窗口的同时,我们要关闭掉原来的登录窗口,方法相同,在登录按钮上添加信号。
信号

self.pushButton.clicked.connect(self.close_window)

槽函数

    def close_window(self):
        MainWindow.close()#关闭的时候要用窗口的实例化对象来关闭,不能用self

这里一定要注意,关闭窗口时必须用真正的实例化对象调用close()方法。而不能用self代替。

2.修改被调用的窗口

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'tiaozhuan.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


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

class Ui_MainWindow(QMainWindow):#将object改为QMainWindow
    def __init__(self):          #添加初始化函数
        super(Ui_MainWindow,self).__init__()
        self.setupUi(self)
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(309, 639)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.toolBox = QtWidgets.QToolBox(self.centralwidget)
        self.toolBox.setGeometry(QtCore.QRect(10, 10, 281, 541))
        self.toolBox.setMaximumSize(QtCore.QSize(281, 16777215))
        self.toolBox.setObjectName("toolBox")
        self.page = QtWidgets.QWidget()
        self.page.setGeometry(QtCore.QRect(0, 0, 281, 425))
        self.page.setObjectName("page")
        self.toolBox.addItem(self.page, "")
        self.page_3 = QtWidgets.QWidget()
        self.page_3.setGeometry(QtCore.QRect(0, 0, 281, 425))
        self.page_3.setObjectName("page_3")
        self.layoutWidget = QtWidgets.QWidget(self.page_3)
        self.layoutWidget.setGeometry(QtCore.QRect(11, 21, 101, 291))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_6 = QtWidgets.QLabel(self.layoutWidget)
        self.label_6.setStyleSheet("border-image: url(:/png/images/周杰伦.jpg);")
        self.label_6.setText("")
        self.label_6.setObjectName("label_6")
        self.verticalLayout.addWidget(self.label_6)
        self.label_8 = QtWidgets.QLabel(self.layoutWidget)
        self.label_8.setStyleSheet("border-image: url(:/png/images/林俊杰.jpg);")
        self.label_8.setText("")
        self.label_8.setObjectName("label_8")
        self.verticalLayout.addWidget(self.label_8)
        self.label_7 = QtWidgets.QLabel(self.layoutWidget)
        self.label_7.setStyleSheet("border-image: url(:/png/images/王力宏.jpg);")
        self.label_7.setText("")
        self.label_7.setObjectName("label_7")
        self.verticalLayout.addWidget(self.label_7)
        self.layoutWidget_2 = QtWidgets.QWidget(self.page_3)
        self.layoutWidget_2.setGeometry(QtCore.QRect(130, 20, 141, 291))
        self.layoutWidget_2.setObjectName("layoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.layoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.label_3 = QtWidgets.QLabel(self.layoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_2.addWidget(self.label_3)
        self.label_5 = QtWidgets.QLabel(self.layoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_2.addWidget(self.label_5)
        self.toolBox.addItem(self.page_3, "")
        self.page_4 = QtWidgets.QWidget()
        self.page_4.setGeometry(QtCore.QRect(0, 0, 281, 425))
        self.page_4.setObjectName("page_4")
        self.toolBox.addItem(self.page_4, "")
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setGeometry(QtCore.QRect(0, 0, 281, 425))
        self.page_2.setObjectName("page_2")
        self.toolBox.addItem(self.page_2, "")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 309, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.toolBox.setCurrentIndex(1)
        self.toolBox.layout().setSpacing(6)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "QQ"))
        self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("MainWindow", "家人"))
        self.label_2.setText(_translate("MainWindow", "周杰伦"))
        self.label_3.setText(_translate("MainWindow", "林俊杰"))
        self.label_5.setText(_translate("MainWindow", "王力宏"))
        self.toolBox.setItemText(self.toolBox.indexOf(self.page_3), _translate("MainWindow", "朋友"))
        self.toolBox.setItemText(self.toolBox.indexOf(self.page_4), _translate("MainWindow", "同事"))
        self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("MainWindow", "致热爱学习的我们"))
import csdn_img_rc

需要修改两处:

class Ui_MainWindow(QMainWindow):object改为QMainWindow
	def __init__(self): #添加初始化函数 
	super(Ui_MainWindow,self).__init__() self.setupUi(self)

在类中添加初始化函数

版权声明:本文为CSDN博主「若非月前即花下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leidawangzi/article/details/110938176

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Qt Designer实现窗口之间跳转,你可以使用QStackedWidget来管理多个窗口,并在需要时切换显示不同的窗口。 以下是一个简单的示例: 1. 在Qt Designer设计你的第一个窗口(例如,MainWindow.ui),并保存为.ui文件。 2. 创建一个新的.py文件(例如,main.py),并在其添加以下代码: ```python from PyQt5 import QtWidgets, uic class MainWindow(QtWidgets.QMainWindow): def __init__(self): super(MainWindow, self).__init__() uic.loadUi('MainWindow.ui', self) self.buttonNext.clicked.connect(self.showNextWindow) def showNextWindow(self): self.stackedWidget.setCurrentIndex(1) # 切换到下一个窗口 if __name__ == '__main__': app = QtWidgets.QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在上面的代码,我们首先从PyQt5模块导入QtWidgets和uic。然后,我们定义了一个名为MainWindow的类,继承自QtWidgets.QMainWindow。在类的构造函数,我们使用uic.loadUi方法加载之前设计好的MainWindow.ui文件,并连接了一个按钮的clicked信号到showNextWindow槽函数。在showNextWindow函数,我们使用self.stackedWidget.setCurrentIndex方法将当前显示的窗口切换到索引为1的下一个窗口。 3. 使用命令行或终端运行`python main.py`启动应用程序,并显示第一个窗口。当点击按钮时,应用程序将切换到下一个窗口。 你可以在Qt Designer设计其他窗口,并在代码进行相应的切换设置。 希望这可以帮助到你!如果你还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莫名sign

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值