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 = 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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山哥ol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值