今天在做pyqt5的多页面跳转时遇到问题,一点击button按钮,程序会崩溃。在网上查了下,应该是当窗口A调用窗口B的时候,两个窗口不能是同一类型。我写的时候把A、B同时写成了QWidget。把窗口B改成Dialog类型后,就可以成功调用了;如果想关联更多窗口,方法相似即可。

大概的模板如下:


class A(QWidget):        def __init__(self):             ...省略...            self.btn = QPushButton('跳转按钮')       def initUI(self):           pass    class B(QDialog):       def __init__(self):             passdef initUI(self):           pass    if __name__ == '__main__':      app = QApplication(sys.argv)       a = A()        b = B()        a.show()        a.btn.clicked.connect(b.show)       app.exec_()    

具体实现:

使用qt designer 设计一个主窗口(带有pushbutton按钮),一个子窗口(我这里是直接使用的Calendar部件)

保存为相应的.ui文件,之后使用pyuic5 -x -o XXX.py XXX.ui生成相应的XXX.py 文件

生成的主窗口文件:main_q.py(可直接运行):


from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(1131, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)self.tabWidget.setGeometry(QtCore.QRect(-20, 10, 1121, 521))self.tabWidget.setObjectName("tabWidget")self.tab = QtWidgets.QWidget()self.tab.setObjectName("tab")self.label_2 = QtWidgets.QLabel(self.tab)self.label_2.setGeometry(QtCore.QRect(60, 50, 101, 16))self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(self.tab)self.label_3.setGeometry(QtCore.QRect(60, 100, 91, 16))self.label_3.setObjectName("label_3")self.label_4 = QtWidgets.QLabel(self.tab)self.label_4.setGeometry(QtCore.QRect(60, 150, 101, 16))self.label_4.setObjectName("label_4")self.lineEdit = QtWidgets.QLineEdit(self.tab)self.lineEdit.setGeometry(QtCore.QRect(202, 50, 171, 20))self.lineEdit.setObjectName("lineEdit")self.lineEdit_2 = QtWidgets.QLineEdit(self.tab)self.lineEdit_2.setGeometry(QtCore.QRect(202, 100, 171, 21))self.lineEdit_2.setObjectName("lineEdit_2")self.lineEdit_3 = QtWidgets.QLineEdit(self.tab)self.lineEdit_3.setGeometry(QtCore.QRect(202, 150, 171, 20))self.lineEdit_3.setObjectName("lineEdit_3")self.pushButton = QtWidgets.QPushButton(self.tab)self.pushButton.setGeometry(QtCore.QRect(120, 240, 75, 41))self.pushButton.setObjectName("pushButton")self.textEdit = QtWidgets.QTextEdit(self.tab)self.textEdit.setGeometry(QtCore.QRect(530, 10, 571, 381))self.textEdit.setObjectName("textEdit")self.tabWidget.addTab(self.tab, "")self.tab_2 = QtWidgets.QWidget()self.tab_2.setObjectName("tab_2")self.groupBox = QtWidgets.QGroupBox(self.tab_2)self.groupBox.setGeometry(QtCore.QRect(10, 10, 161, 171))self.groupBox.setObjectName("groupBox")self.layoutWidget = QtWidgets.QWidget(self.groupBox)self.layoutWidget.setGeometry(QtCore.QRect(10, 40, 91, 62))self.layoutWidget.setObjectName("layoutWidget")self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)self.verticalLayout_2.setObjectName("verticalLayout_2")self.radioButton = QtWidgets.QRadioButton(self.layoutWidget)self.radioButton.setObjectName("radioButton")self.verticalLayout_2.addWidget(self.radioButton)self.radioButton_2 = QtWidgets.QRadioButton(self.layoutWidget)self.radioButton_2.setObjectName("radioButton_2")self.verticalLayout_2.addWidget(self.radioButton_2)self.radioButton_3 = QtWidgets.QRadioButton(self.layoutWidget)self.radioButton_3.setObjectName("radioButton_3")self.verticalLayout_2.addWidget(self.radioButton_3)self.groupBox_2 = QtWidgets.QGroupBox(self.tab_2)self.groupBox_2.setGeometry(QtCore.QRect(199, 19, 351, 161))self.groupBox_2.setObjectName("groupBox_2")self.layoutWidget1 = QtWidgets.QWidget(self.groupBox_2)self.layoutWidget1.setGeometry(QtCore.QRect(70, 20, 261, 102))self.layoutWidget1.setObjectName("layoutWidget1")self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget1)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.dial = QtWidgets.QDial(self.layoutWidget1)self.dial.setObjectName("dial")self.horizontalLayout.addWidget(self.dial)self.lcdNumber = QtWidgets.QLCDNumber(self.layoutWidget1)self.lcdNumber.setObjectName("lcdNumber")self.horizontalLayout.addWidget(self.lcdNumber)self.fontComboBox = QtWidgets.QFontComboBox(self.tab_2)self.fontComboBox.setGeometry(QtCore.QRect(90, 220, 165, 22))self.fontComboBox.setObjectName("fontComboBox")self.label = QtWidgets.QLabel(self.tab_2)self.label.setGeometry(QtCore.QRect(90, 300, 251, 91))self.label.setLayoutDirection(QtCore.Qt.LeftToRight)self.label.setAlignment(QtCore.Qt.AlignCenter)self.label.setObjectName("label")self.progressBar = QtWidgets.QProgressBar(self.tab_2)self.progressBar.setGeometry(QtCore.QRect(40, 440, 451, 23))self.progressBar.setProperty("value", 24)self.progressBar.setObjectName("progressBar")self.tabWidget.addTab(self.tab_2, "")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 1131, 23))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.tabWidget.setCurrentIndex(0)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label_2.setText(_translate("MainWindow", "请输入开始时间:"))self.label_3.setText(_translate("MainWindow", "请输入结束时间:"))self.label_4.setText(_translate("MainWindow", "请输入k值:"))self.pushButton.setText(_translate("MainWindow", "开始查询"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "选项卡1"))self.groupBox.setTitle(_translate("MainWindow", "功能选项"))self.radioButton.setText(_translate("MainWindow", "RadioButton"))self.radioButton_2.setText(_translate("MainWindow", "RadioButton"))self.radioButton_3.setText(_translate("MainWindow", "RadioButton"))self.groupBox_2.setTitle(_translate("MainWindow", "移动刻度盘"))self.label.setText(_translate("MainWindow", "TextLabel"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "选项卡2"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

生成的子窗口文件calendars.py(可直接运行:

from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_calendar(object):def setupUi(self, calendar):calendar.setObjectName("calendar")calendar.resize(277, 247)self.calendarWidget = QtWidgets.QCalendarWidget(calendar)self.calendarWidget.setGeometry(QtCore.QRect(-3, -4, 281, 251))self.calendarWidget.setObjectName("calendarWidget")self.retranslateUi(calendar)QtCore.QMetaObject.connectSlotsByName(calendar)def retranslateUi(self, calendar):_translate = QtCore.QCoreApplication.translatecalendar.setWindowTitle(_translate("calendar", "Dialog"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)calendar = QtWidgets.QDialog()ui = Ui_calendar()ui.setupUi(calendar)calendar.show()sys.exit(app.exec_())

通过生成以上两个文件之后,编写一个文件,将两个窗体关联

from GUI_pyqt.main_q import Ui_MainWindow
from GUI_pyqt.calendars import Ui_calendarfrom PyQt5.QtWidgets import QApplication,QMainWindow,QDialog
import sysclass ParentWindow(QMainWindow):def __init__(self):QMainWindow.__init__(self)self.main_ui = Ui_MainWindow()self.main_ui.setupUi(self)class ChildWindow(QDialog):def __init__(self):super(ChildWindow,self).__init__()self.calendars = Ui_calendar()self.calendars.setupUi(self)if __name__ =="__main__":app = QApplication(sys.argv)window = ParentWindow()child = ChildWindow()#通过按钮将两个窗体关联btn = window.main_ui.pushButtonbtn.clicked.connect(child.show)#显示window.show()sys.exit(app.exec_())

完成,接下来可以让窗口返回数据,或者更多的操作。

参考:https://blog.csdn.net/weixin_39449466/article/details/81008711

pyqt 多窗口跳转相关推荐

  1. pyqt登录界面跳转及传值给主界面

    pyqt登录界面跳转及传值给主界面 开头 最近要做一个应用,其中一个模块要管理表格数据,设置登录界面.目的是实现登录界面验证身份,而后登录主窗口,将登录用户名传递给主窗口.本来也可以通过登录窗口对数据 ...

  2. [转载]WPF窗口跳转及window和page区别

    刚接触WPF,有两个概念不是很懂,现理解如下: 1:window和page谁包含谁的问题 一新建WPF应用程序,发现默认启动界面是一个window,将默认启动改为page,没有错误.但是如果在page ...

  3. python跳转到程序顶部_python-如何使Tkinter窗口跳到最前面?

    python-如何使Tkinter窗口跳到最前面? 如何获得Tkinter应用程序跳转到最前面? 当前,该窗口显示在我所有其他窗口的后面,并且没有获得焦点. 我应该打电话给一些方法吗? nathan ...

  4. 安卓学习笔记07:事件处理、窗口跳转与传递数据

    文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...

  5. PyQt主窗口、对话框

    PyQt的各类窗口 一.主窗口(QMainWindow) 1.窗口样式 2.窗口模态 二.对话窗口(QDialog) 1.消息窗口 QMessageBox 2.输入窗口 QInputDialog 3. ...

  6. 页面之间跳转、新打开窗口跳转

    页面之间进行跳转 //code为传递的参数,以&进行参数拼接 window.location.href = "http://58.56.27.54:38102/bi/Viewer?c ...

  7. pyqt 子窗口控制主窗口绘图_实战PyQt5: 005-主窗口QMainWindow

    QMainWindow简介 在桌面应用中,一个应用软件通常都会包含一个主窗口,主窗口是承载所有控件的窗体, 在PyQt5中常用的主窗体有两种QMainWindow和QDialog,他们也都继承自QWi ...

  8. java 新窗口跳转页面_Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开...

    最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开, 而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方 ...

  9. 关于窗口跳转的一些总结

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

最新文章

  1. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
  2. 《LeetCode力扣练习》第31题 下一个排列 Java
  3. 思科bfd静态路由切换_思科路由器与华为路由器静态路由关联双向BFD配置
  4. 不使用自动注解方式来生成mapper,采用原生方式来生成mapper
  5. Apache Dubbo是一款高性能Java RPC框架。
  6. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  7. 研发中,问题以界面开发人员为解决负责人
  8. 快速突破面试算法之动态规划篇
  9. Python数据类型函数
  10. 加速度随机游走_怎么才能形象的说明IMU的bias随机游走?
  11. 人口logistic模型公式_最新人口指数增长模型和logistic模型教学文案
  12. 面试被问TypeScript,我哑口无言
  13. python 脚本梦幻西游_GitHub - U200915104/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
  14. 【笔记】系统和内核版本用户系统时间YUM仓库selinuxfirewalld
  15. 微信卡券之众多坑总结(Java)---优惠券
  16. 【signal】傅里叶分析和FFT蝶形算法
  17. 山东八年级计算机教案,初中信息技术 青岛版 八年级信息技术全册教案
  18. java万年历课程设计代码,JAVA《万年历系统》课程设计
  19. linux java时区_教大家几种在Linux系统中查看时区的方法
  20. FreeCAD中数据显示流程

热门文章

  1. 蓝桥杯真题 15省7-牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,
  2. 小程序怎么做查看更多的显示和隐藏
  3. 用计算机弹出吃鸡战歌,安卓模拟器玩绝地求生:刺激战场电脑版怎么过模拟器检测教程...
  4. 【艾琪出品】-【计算机】测试题系列五参考资料
  5. JSONObject源码解析
  6. KTC M27P20 怎么样
  7. python加密库crypto、pycrypto、pycrytodome区别
  8. P4158[SCOI2009]粉刷匠
  9. 什么是分布式数据库?
  10. Android 画中画 Picture-in-picture 使用