网站首页 > 开源技术 正文
1.简介
通过自定义信号的方式将主窗口和子窗口进行数据交互。
2.案例
- main.py
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QPushButton, QLineEdit
from DateDialog_2 import DateDialog
"""
当DateDialog子窗口中的日历控件选择修改日期后,通过自定义信号传递给主窗口中进行显示
"""
class MultiWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('自定义信号实现多窗口交互')
self.resize(600, 400)
self.line = QLineEdit()
self.btn1 = QPushButton('获取时间')
# 第一步,执行按钮绑定的槽函数方法
self.btn1.clicked.connect(self.date_dialog)
g_layout = QGridLayout(self)
g_layout.addWidget(self.line)
g_layout.addWidget(self.btn1)
def date_dialog(self):
# 第二步,初始化DateDialog方法
dd = DateDialog(self)
# 第三步,绑定子窗口自定义信号与主窗口槽函数
dd.get_datetime.connect(self.signal_get_data) # 主窗口调用子窗口的自定义信号并绑定槽函数来设置主窗口显示的内容
# 第四步,展示子窗口
dd.show()
def signal_get_data(self, d):
print(d)
# 参数d为子窗口,自定义信号发射时传递的日期参数。
self.line.setText(d)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MultiWindow()
w.show()
sys.exit(app.exec())
- DateDialog_2.py
from PyQt5.QtWidgets import QDialog, QDateTimeEdit, QDialogButtonBox, QVBoxLayout
from PyQt5.QtCore import Qt, QDateTime, pyqtSignal
"""
定义日历窗口
"""
class DateDialog(QDialog):
get_datetime = pyqtSignal(str)
def __init__(self, p):
super(DateDialog, self).__init__(p)
self.setWindowTitle('日期')
v_layout = QVBoxLayout(self)
self.dte = QDateTimeEdit()
self.dte.setCalendarPopup(True)
self.dte.setDateTime(QDateTime.currentDateTime())
v_layout.addWidget(self.dte)
# 创建窗口按钮
btn_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self)
btn_box.accepted.connect(self.accept)
btn_box.rejected.connect(self.reject)
v_layout.addWidget(btn_box)
# 第五步,当子窗口修改日期时,触发日期修改槽函数
self.dte.dateChanged.connect(self.emit_signal) # 当日历控件日期修改时触发当前事件
def emit_signal(self):
# 第六步,获取当前时间,并初始化字符串
date = self.dte.dateTime().toString() # 获取当前时间
print(date)
# 第七步,执行信号
self.get_datetime.emit(date) # 发射信号,并将修改后的日期传递给主窗口自定义信号绑定的槽函数中
3.运行结果
猜你喜欢
- 2025-03-20 Qt 中设置窗体(QWidget)透明度的几种方法
- 2025-03-20 小白之Tkinter库读文:Tkinter目录(1)
- 2025-03-20 iPhone SE拆解:原來這些地方沒有變過
- 2025-03-20 一学会用python编写截取屏幕截图软件
- 2025-03-20 微信WeUI设计规范文件下载及使用方法
- 2025-03-20 10分钟实现PDF转Word神器!看DeepSeek如何用Python解放打工人
- 2025-03-20 生成AutoCAD图纸批量合并代码(cad图纸合并命令)
- 2025-03-20 Qt设备识别(简单的密钥生成器)(qt程序不依赖代码进行密钥验证)
- 2025-03-20 挖挖里面细节 iPhone6/Plus主板剖析图
- 2025-03-20 EXCEL VBA学习笔记:VBA弹出选择文件或文件夹的窗口(二)
你 发表评论:
欢迎- 03-26业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
- 03-2615个最好的性能测试工具(软件测试工程师必备)
- 03-26软件测试工程师必备技巧!(软件测试工程师入门教程)
- 03-26UE4基础知识总结(七)(ue4入门)
- 03-26Portkeys推出新款HDMI播放器:5.5英寸FHD屏幕,支持4K输入/输出
- 03-26数字时代的纯粹,HiFiMan HM-901S 播放器体验
- 03-26CBN丨Double 11 sales shows resilience in China’s consumption
- 03-26AKG K812简单听感(akgk812pro评测)
- 最近发表
-
- 业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
- 15个最好的性能测试工具(软件测试工程师必备)
- 软件测试工程师必备技巧!(软件测试工程师入门教程)
- UE4基础知识总结(七)(ue4入门)
- Portkeys推出新款HDMI播放器:5.5英寸FHD屏幕,支持4K输入/输出
- 数字时代的纯粹,HiFiMan HM-901S 播放器体验
- CBN丨Double 11 sales shows resilience in China’s consumption
- AKG K812简单听感(akgk812pro评测)
- 盘点索尼Walkman发展史,哪台播放器让你印象深刻
- LUXMAN力仕 DA-07X 解码器#发烧hifi
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)