PyQt5信号与槽(五)窗口数据传递
五、窗口数据传递
1、单一窗口数据传递
- 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的;如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。
- 对于具有单一窗口的程序来说,一个控件的变化会影响另一个控件的变化,这种变化利用信号与槽机制非常容易解决。
- 案例——使用滑块控制LCD变化
# -*- coding:utf-8 -*- """ # @Time:2022/12/13 0013 0:00 # @Author:晚秋拾叶 # @File:qt07_winSignalSlot06.py # @PyCharm之Python """ import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * class WinForm(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): lcd = QLCDNumber(self) slider = QSlider(Qt.Horizontal, self) vBox = QVBoxLayout() vBox.addWidget(lcd) vBox.addWidget(slider) self.setLayout(vBox) # 此处是内置信号与内置槽的基本应用了 slider.valueChanged.connect(lcd.display) self.setGeometry(300, 300, 550, 300) self.setWindowTitle("信号与槽:连接滑块和LCD") if __name__ == "__main__": app = QApplication(sys.argv) form = WinForm() form.show() app.exec_()
- 案例——使用滑块控制LCD变化
- 效果如图
- 代码分析
-
这个程序首先创建滑块和LCD控件,而且这两个控件都是系统自带的,很容易实现。
lcd = QLCDNumber(self) slider = QSlider(Qt.Horizontal, self)
-
然后,通过垂直布局器完成布局,而且还要放到QWidget总控件中。
vBox = QVBoxLayout() vBox.addWidget(lcd) vBox.addWidget(slider) self.setLayout(vBox)
-
最后,接连到QSlidre控件的valueChanged()信号函数和LCD面板控件的display()槽函数。这样就是一个典型的内置信号与内置槽的接连了。
-
除了valueChange()之外,QSlider还有sliderPressured()、sliderMoved()、sliderReleased()等信号函数。
-
2、多窗口数据传递:调用属性
- 在PyQt编程过程中,经常会遇到输入或选择多个参数的问题。把多个参数写到一个窗口中,主窗口会显得很臃肿,所以一般是添加一个按钮,调用对话框,在对话框中进行参数的选择,关闭对话框时将参数值返回给主窗口。
- PyQt提供了一些标准的对话框类,用于输入数据、修改数据、更改应用的设置等,常见的有QFileDialog、QInputDialog、QColorDialog、QFontDialog等。在不同的窗口之间传参有两种常用的方式:一种是在自定义对话框之间通过属性传参;另一种是在窗口之间使用信号与槽机制传参。
- 在下面例子中,将自定义对话框作为一个子窗口,后面会新建一个主窗口来调用这个子窗口的属性。
- 示例文件1——自定义的对话框:
from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class DateDialog(QDialog): def __init__(self, parent=None): super(DateDialog, self