添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本例给出了三种窗口打开方式。
其中主界面打开主界面的方式,比较实用,却少有示例。特发布于此,希望对大家有帮助。

一.主界面打开 新的主界面
二.主界面打开 对话框
三.主界面打开 提示框

【如下代码,完全复制,直接运行,即可使用】

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
################################################
#######创建主窗口
################################################
class FirstMainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('主界面')
        ###### 创建界面 ######
        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)
        self.Layout = QVBoxLayout(self.centralwidget)
        # 设置顶部三个按钮
        self.topwidget = QWidget()
        self.Layout.addWidget(self.topwidget)
        self.buttonLayout = QHBoxLayout(self.topwidget)
        self.pushButton1 = QPushButton()
        self.pushButton1.setText("打开主界面")
        self.buttonLayout.addWidget(self.pushButton1)
        self.pushButton2 = QPushButton()
        self.pushButton2.setText("打开对话框")
        self.buttonLayout.addWidget(self.pushButton2)
        self.pushButton3 = QPushButton()
        self.pushButton3.setText("打开提示框")
        self.buttonLayout.addWidget(self.pushButton3)
        # 设置中间文本
        self.label = QLabel()
        self.label.setText("第一个主界面")
        self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setFont(QFont("Roman times", 50, QFont.Bold))
        self.Layout.addWidget(self.label)
        # 设置状态栏
        self.statusBar().showMessage("当前用户:一心狮")
        # 窗口最大化
        self.showMaximized()
        ###### 三个按钮事件 ######
        self.pushButton1.clicked.connect(self.on_pushButton1_clicked)
        self.pushButton2.clicked.connect(self.on_pushButton2_clicked)
        self.pushButton3.clicked.connect(self.on_pushButton3_clicked)
    def on_pushButton1_clicked(self):
        the_window =SecondWindow()
        self.windowList.append(the_window)   ##注:没有这句,是不打开另一个主界面的!
        self.close()
        the_window.show()
    # 按钮二:打开对话框
    def on_pushButton2_clicked(self):
        the_dialog = TestdemoDialog()
        if the_dialog.exec_() == QDialog.Accepted:
    # 按钮三:打开提示框
    def on_pushButton3_clicked(self):
        QMessageBox.information(self, "提示", "这是information框!")
        #QMessageBox.question(self, "提示", "这是question框!")
        #QMessageBox.warning(self, "提示", "这是warning框!")
        #QMessageBox.about(self, "提示", "这是about框!")
################################################
#######第二个主界面
################################################
class SecondWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('第二主界面')
        # 设置中间文本
        self.label = QLabel()
        self.label.setText("第二个主界面")
        self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setFont(QFont("Roman times", 50, QFont.Bold))
        self.setCentralWidget(self.label)
        # 设置状态栏
        self.statusBar().showMessage("当前用户:一心狮")
        # 窗口最大化
        self.showMaximized()
    ###### 重写关闭事件,回到第一界面
    windowList = []
    def closeEvent(self, event):
        the_window = FirstMainWindow()
        self.windowList.append(the_window)  ##注:没有这句,是不打开另一个主界面的!
        the_window.show()
        event.accept()
################################################
#######对话框
################################################
class TestdemoDialog(QDialog):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('对话框')
        ### 设置对话框类型
        self.setWindowFlags(Qt.Tool)
################################################
#######程序入门
################################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    the_mainwindow = FirstMainWindow()
    the_mainwindow.show()
    sys.exit(app.exec_())


作者:一心狮
链接:https://www.imooc.com/article/73046
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

================== =分割线===以上为转载================

参考以上程序这里我改了两个地方,使两个界面可以同时存在,且不会互相影响。

第一个地方:把主窗口中的

def on_pushButton1_clicked(self):
        the_window =SecondWindow()
        self.windowList.append(the_window)   ##注:没有这句,是不打开另一个主界面的!
        self.close()    这一行代码删除了
        the_window.show()

第二个地方:把第二窗口的

  windowList = []
    def closeEvent(self, event):
        the_window = FirstMainWindow()
        self.windowList.append(the_window)  ##注:没有这句,是不打开另一个主界面的!
        the_window.show() 这一句删除了
        event.accept()

这样让两个窗口可以互相调用但不会互相产生影响。

最后感谢一心狮的方法。

原文链接:https://www.imooc.com/article/73046 使用PyQt5开发图形界面应用程序时,可能需要同时处理多个任务并显示多个窗口。为了实现这样的功能,我们可以结合多线程和多窗口的交互。本文将为您展示一个简单的示例,演示如何在PyQt5中启动多个线程和窗口,并实现它们之间的交互。接下来,我们将创建两个窗口类和一个线程类。第一个窗口类将包含一个按钮,点击按钮将启动第二个窗口。第二个窗口将显示一个进度条,该进度条将在一个线程中运行,并显示其进度。首先,我们需要安装PyQt5库。在这个示例 self.init_ui() 1.首先需要准备一个界面的UI文件,叫做MainWindow.ui,然后生成MainWindow.py文件。 2.然后准备一个子页面的UI文件,叫做QueryResult.ui,然后生成QueryResult.py文件。 3.在designer模式下给界面控件添加信号/槽(我这里实现的功能是点击按钮跳转到另一个界面,所以我给button绑定了一个click()信号)。 4.保存修改后的界面。 5.重新生成py文件。 6.在主程序文件中,定义两个类分别对应我们的页面类和子页面类。 具体代码如下所示:import sysimport osimport sysimport ioimport datetimedef create_detail_day():''':return:'''# 年-月-日# daytime = datetime.datetime.now().strftime('day'+'%Y-%m-%d')# 年_月_日daytime = datetime.datet... class MyMainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MyMainWindow, self).__init__(parent) 2 定义另一个窗口的类,里面有我想在窗口类里使用的控件Trai 我试着把一个变量从一个MainWindow调用到另一个对话类,我知道这个问题以前有人问过,但我尝试了所有给定的答案,但我无法使它工作,因为我仍然是python的初学者。在我的代码如下(考虑到我需要它在同一While循环中,我想调用的变量是self.Value):from PyQt4 import QtCore, QtGuiimport sysimport timefrom threading i... 在Qt中,窗口嵌套是一种常见的技术,可以在一个窗口中嵌入另一个窗口,以实现更复杂的用户界面。下面是一个简单的例子,展示了如何在一个窗口中嵌入另一个窗口。这只是窗口嵌套的一个简单示例,Qt提供了更多的功能和选项,可以根据需要进行定制。首先,我们需要创建两个窗口类,一个窗口类(MainWindow),另一个是子窗口类(ChildWindow)。类中,我们还建立了一个连接,以便在子窗口中的按钮被点击时触发一个槽函数。通过运行上面的代码,我们可以看到一个窗口以及一个嵌入在其中的子窗口。 1.首先打开Qt Creator,新建Qt Widgets Application,项目名称设置为windows,在类信息界面保持基类为QMainWindow、类名为MainWindow,这样将会生成一个窗口界面。 2.完成项目创建后,双击