第9天 | 28天学会PyQt5,数据传递事件
off999 2024-12-03 00:17 24 浏览 0 评论
在开发桌面应用程序时,经常需要在两个界面之间做数据的传递,在PyQt5中,你可以用pyqtSignal进行实现。通过pyqtSignal可以声明不带参数和带参数的实例对象,带参数的实例对象可以整型、字符型、列表和字典等数据类型。
pyqtSignal对象用connect()方法绑定多个处理函数,在emit()方法发送数据时,绑定的函数都会收到。了解过设计模式的朋友应该知道,这是观察者模式的应用。记得将connect()方法放在窗口显示方法show()之前,否则不起作用。
让打开的窗口处于模态,需要在show()之前,用setWindowModality(Qt.ApplicationModal)方法进行设置。
窗口控件的布局,用了move(x,y)方法进行x、y坐标绝对定位的方式,这种方式在固定窗口,即大小不变的应用程序中没多大问题,如果想要用在自动适配窗口大小方面,则用布局管理更加合适。
程序清单:data_event.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit,
\QMessageBox, QDesktopWidget, QPushButton, QDialog
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QPalette
# 激活窗口
class ActivateWindow(QDialog):
# 声明pyqtSignal
signal = pyqtSignal(int)
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.title = QLabel(self)
self.title.move(55, 50)
palette = QPalette()
palette.setColor(QPalette.WindowText, Qt.red)
self.title.setPalette(palette)
info = QLabel(self)
info.move(30, 120)
# 激活码和操作按钮
info.setText("激活码:")
self.code = QLineEdit(self)
self.code.setFixedSize(160, 22)
self.code.setPlaceholderText("请输入激活码")
self.code.move(80, 118)
submit_btn = QPushButton(self)
submit_btn.setText("激活")
submit_btn.move(50, 200)
close_btn = QPushButton(self)
close_btn.setText("退出")
close_btn.move(150, 200)
# 控件绑定方法
submit_btn.clicked.connect(self.activate)
close_btn.clicked.connect(self.close_win)
self.setWindowFlags(Qt.CustomizeWindowHint |
Qt.MSWindowsFixedSizeDialogHint |
Qt.WindowStaysOnTopHint)
self.setWindowTitle("系统激活")
self.resize(280, 380)
# 接受从父窗口发送过来的数据
def get_data(self, num):
self.title.setText("%d个月的试用期已到,请激活" % num)
# 激活操作
def activate(self):
if self.code.text().strip() == "":
QMessageBox.information(self, "退出提醒", "激活码不可为空",
QMessageBox.Ok)
else:
# 发送到主窗口
self.signal.emit(100)
self.close()
# 退出窗口
def close_win(self):
self.close()
# 继承QWidget
class MainWindow(QMainWindow):
# 声明pyqtSignal
signal = pyqtSignal(int)
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 创建状态栏
self.status = self.statusBar()
self.status.showMessage("等待指示")
# 创建按钮
activate_btn = QPushButton(self)
activate_btn.setFixedSize(160, 80)
activate_btn.setText("软件试用期已过\n请点击进行激活")
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.red)
activate_btn.setPalette(palette)
activate_btn.setAutoFillBackground(True)
activate_btn.move(100, 100)
activate_btn.clicked.connect(self.openWindow)
# 调整窗口大小
self.resize(900, 500)
# 窗口居中
self.center()
# 窗口标题
self.setWindowTitle("管理窗口")
# 显示窗口
self.show()
# 操作结果
def result(self, flag):
self.status.showMessage("恭喜你,激活成功了!")
def update(self, num):
self.status.showMessage("发送到子窗口的数据是:%d" % num)
# 打开新窗口
def openWindow(self):
activate_win = ActivateWindow()
# 绑定要通知的方法(当前方法和子窗口),支持多个
self.signal.connect(self.update)
self.signal.connect(activate_win.get_data)
# 发送数据
self.signal.emit(3)
# 子窗口的signal绑定本窗口的方法
activate_win.signal.connect(self.result)
# 设置模态窗口
activate_win.setWindowModality(Qt.ApplicationModal)
activate_win.show()
activate_win.exec_()
# 关闭窗口
def closeEvent(self, e):
result = QMessageBox.information(self, "退出提醒",
"你确定要退出系统?",
QMessageBox.Yes |
QMessageBox.No)
if result == QMessageBox.Yes:
print("执行退出动作")
self.close()
# 实现居中
def center(self):
f = self.frameGeometry()
c = QDesktopWidget().availableGeometry().center()
f.moveCenter(c)
self.move(f.topLeft())
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
sys.exit(app.exec_())运行程序之后,弹出的窗口如下:
好了,数据传递事件的内容就说到这了,关注我,下一节更精彩。
码字不易,你的关注和转发是对我最大的鼓励,谢谢!
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!
相关推荐
- 笔记本电脑没声音是什么原因
-
笔记本电脑没有声音的原因是:1.声音是否被调到最小了。2.音频是否被禁用了。3.声卡驱动是不是有问题。4.如果电脑既没有声音也没有小喇叭的图标,则表示电脑的音频设备未启用。笔记本电脑没有声音的原因是:...
- melogin路由器设置登录入口(192.168.1.1直接进入)
-
melogincn路由器的设置步骤如下第一、路由器线路连接1、请把你的.水星双频路由器上的WAN接口,用网线连接到猫的网口。如果你家宽带没有用到猫,就把入户的宽带网线,插在路由器的WAN口。2、把你的...
-
- 如何优化电脑性能
-
可以通过以下几个步骤来提高电脑运行速度和游戏流畅度:1.清理垃圾文件和无用程序,可以使用系统自带的清理工具或第三方软件;2.关闭开机自启动项,只保留必要的程序开机启动;3.升级硬件,比如增加内存、更换硬盘等;4.优化系统设置,如关闭不必要的...
-
2026-01-02 06:51 off999
- ie8以上版本浏览器(ie8及以上版本浏览器)
-
浏览器IE8版本以上的意思就是当浏览的网页不支持低版本的IE浏览器,就会提示需要版本较高的IE8以上的版本才可以打开浏览网页。IE浏览器是美国微软公司推出的一款网页浏览器,原名MicrosoftIn...
- 适合电脑的应用商店(电脑最好的应用商店)
-
1.MicrosoftToDo推荐理由:微软出品,必属精品2.Microsoft便笺推荐理由:又是一款微软官方出品的良心免费应用,相比MicrosoftToDo,Microsoft便笺更加...
- 家里无线网连上不能用(家里无线网不能使用)
-
WiFi连上但不能使用可能有多种原因。以下是一些常见问题和解决方法:1.路由器问题:首先要确认路由器是否正常工作。可以尝试重启路由器,等待几分钟后再次连接并测试。2.网络设置问题:检查设备上的网络...
- 低价香港服务器(香港服务器推荐性价比)
-
香港最好的服务器是双向cn2+移动+联通三线优化直连的,性能配置都非常高,而且速度还非常稳定。 香港服务器的使用方法:1、首先需要选择一个服务商进行购买服务器;2、购买成功后,可在本地计算机...
- 免费360清理大师官方版(华为自带清理软件)
-
挺好用的。它可以清除你手机的里面的垃圾,检测和修复软件安全性。还有一些漏洞垃圾,你可以试着对比和使用,功效和针对性比较强。您杀毒没有效果的原因可能是您的安全软件版本过旧导致的,建议您使用最新版的腾讯手...
- 万能解压器安卓版(万能解压器官方下载)
-
是一款手机文件的助手。万能解压器手机版。专注于快速解压和压缩的文件管理工具!支持ZIP,RAR,7Z,TAR,ZIPX,GZIP,JAR等压缩和解压文件格式。是超好用、超便捷的解压软件!支持在手机上将...
- cad看图(cad看图王)
-
以下是一些CAD看图的方法和技巧:1.放大/缩小:使用滚轮或放大镜工具可以方便地放大或缩小绘图。2.平移:使用平移工具可以在不改变视角的情况下将绘图向上、向下、向左或向右移动。3.旋转:使用旋转...
-
- dell笔记本售后服务电话是多少
-
以下为dell售后服务点A:戴尔笔记本电脑维修点地址:上海市长宁区长宁路1027号兆丰广场5层 B:戴尔笔记本电脑维修点地址:上海市徐汇区漕溪北路45号 C:戴尔笔记本电脑维修点地址:上海市徐汇区漕溪路250号银海大厦1...
-
2026-01-02 02:03 off999
- 如何找回浏览器(如何找回浏览器删除记录)
-
如果您的浏览器出现了问题,可以尝试以下方法来恢复浏览器:1.重新启动浏览器:关闭浏览器窗口,再重新打开浏览器,看是否能够解决问题。2.清除浏览器缓存:浏览器缓存可能会导致浏览器出现问题,可以尝试清...
- 应用备份还原app下载(应用备份与恢复下载)
-
如果您已经将手机上的数据备份到电脑,希望从电脑恢复到手机,建议您:1.电脑中安装Kies软件。注:若使用的是安卓4.3操作系统,电脑中需要安装Kies3软件。2.将手机与电脑通过数据线连接,打开Kie...
-
- office2013激活向导(microsoft office激活导向)
-
这是没有正常激活导致的,解决方法如下:1、下载正确的microsoftoffice到桌面上,右键单击从下拉菜单中选择解压到当前文件夹。2、双击桌面上的快捷方式,打开该应用程序,切换到mian选项卡。3、接着点击ez-activator按钮...
-
2026-01-02 00:51 off999
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
