本例给出了三种窗口打开方式。
其中主界面打开主界面的方式,比较实用,却少有示例。特发布于此,希望对大家有帮助。
一.主界面打开 新的主界面
二.主界面打开 对话框
三.主界面打开 提示框
【如下代码,完全复制,直接运行,即可使用】
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.完成项目创建后,双击