美文网首页一起玩pythonpyQt5程序员
PyQT5--入门程序(联动器)体会信号与槽

PyQT5--入门程序(联动器)体会信号与槽

作者: 肥宅_Sean | 来源:发表于2018-02-02 00:02 被阅读60次

在以前学习QT的时候,这个是在网上看到有大神做这个的演示给大家来学。觉得很有趣,而且,正是在这个程序的帮助下,我理解了QT的信号与槽的机制。相信,在写这个代码,会帮助到不少对于信号与槽还有些许不了解的朋友们

联动器

联动器设计基础

这里有四个东西。

  • 一个水平的横轴(可以拖动)
  • 一个竖直的轴(也可以拖动)
  • 一个Dial(刻度盘,可以转动的)
  • 一个double spin box(浮点数的可以动盒子)

就是在使用的时候,只要改变了一个就会把其他都改变。

比如,以下的图片


转了一下 把鼠标移到浮点数部分,滚动了一下鼠标滚轮

联动器设计关键函数

下面这四句话

self.doubleSpinBox.valueChanged.connect(lambda:self.verticalSlider.setValue(self.doubleSpinBox.value()))      

self.verticalSlider.valueChanged.connect(lambda:self.horizontalSlider.setValue(self.verticalSlider.value())) 

self.horizontalSlider.valueChanged.connect(lambda: self.dial.setValue(self.horizontalSlider.value()))

self.dial.valueChanged.connect(lambda : self.doubleSpinBox.setValue(self.dial.value()))

表示的意思就是,只要一个变了数值,就会把另外一个的数值改动。这样顺着改下去,就把所有的都改动了。

至于这里的lambda : 为什么要这么写? 我之前已经在第一篇最简单的pyQT5入门中讲过了,类比于c++ QT中的SLOT(),当然也可以用装饰器来做。

为什么说这个程序可以帮助人理解关于“信号与槽”的机制?

  • 这里,看到了由于一个数据的改变,而触发了另外一个函数的启动
  • 反反复复地相互触发,体会到信号与槽机制的有趣(符合人的思维的设计)

至于上面的那四句代码,还是比较好理解的
(老规矩,下面代码可以直接运行。只要你是下好了那些库(pip install 嘿嘿))


全部代码在这个里(这次比上次多了一个"设置框体的标题,留心的朋友,可以收获到这个知识点")

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'valueChange.ui'
#
# Created by: PyQt5 UI code generator 5.10
#

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(759, 339)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.dial = QtWidgets.QDial(self.centralwidget)
        self.dial.setGeometry(QtCore.QRect(30, 60, 251, 231))
        self.dial.setObjectName("dial")
        self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
        self.horizontalSlider.setGeometry(QtCore.QRect(70, 20, 221, 31))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox.setGeometry(QtCore.QRect(460, 80, 191, 151))
        self.doubleSpinBox.setObjectName("doubleSpinBox")
        self.verticalSlider = QtWidgets.QSlider(self.centralwidget)
        self.verticalSlider.setGeometry(QtCore.QRect(330, 70, 22, 211))
        self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
        self.verticalSlider.setObjectName("verticalSlider")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        self.doubleSpinBox.valueChanged.connect(lambda:self.verticalSlider.setValue(self.doubleSpinBox.value()))
        self.verticalSlider.valueChanged.connect(lambda:self.horizontalSlider.setValue(self.verticalSlider.value()))
        self.horizontalSlider.valueChanged.connect(lambda: self.dial.setValue(self.horizontalSlider.value()))
        self.dial.valueChanged.connect(lambda : self.doubleSpinBox.setValue(self.dial.value()))


        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainwindow = QMainWindow()
    uiWindows = Ui_MainWindow()
    uiWindows.setupUi(mainwindow)
    mainwindow.setWindowTitle("Changer")
    mainwindow.show()
    sys.exit(app.exec_())
    pass

相关文章

  • PyQT5--入门程序(联动器)体会信号与槽

    在以前学习QT的时候,这个是在网上看到有大神做这个的演示给大家来学。觉得很有趣,而且,正是在这个程序的帮助下,我理...

  • PyQt信号与槽之信号与槽的入门应用(一)

    前言 信号与槽有三种使用方法第一种:内置信号与槽的使用第二种:自定义信号与槽的使用第三种:装饰器的信号与槽的使用 ...

  • Qt5 - 3. 自定义信号&槽

    信号&槽是 Qt 的核心特性之一,Qt 允许我们自定义信号&槽,因此我们可以在 Qt 程序中定义我们自己的信号&槽...

  • PyQT5--最轻松的入门程序

    想当初做QT的第一个程序就是写的是加法器所以,做PyQT5的时候不意外的选择 做一个加法器其实,PyQt5中最困难...

  • 信号与槽

    在Qt Designer中设置信号与槽 信号(signal) 槽(slot) 是Qt的核心机制,也是PyQt的核心...

  • DTK教程 七 :信号与槽 [ 就是我点一下按钮,按钮做什么事情

    信号与槽是Qt的特色,dtk使用了Qt的库,自然是拥有这个特色的。与事件相比较而言,我更喜欢信号与槽,主要是信号与...

  • signal and slot

    信号与槽,是Qt的核心机制,pyqt 是python对Qt的完全封装,因此,信号与槽也是pyqt的核心机制。 通...

  • 信号与槽函数

    实例分析 例程1: 例程2: 运行结果: 装饰器信号与槽函数 使用方法: 生效的前提:是下面这条语句被执行 举例说...

  • 【Qt】信号与槽

    信号就是“某某事件发生了”这么一个信号,槽就是对应事件发生时所需采取的应对措施。 连接方式:widget.信号.c...

  • 信号与槽机制

    在PySide2中,有个信号与槽机制。 那这个东西是什么意思呢? 首先,在PySide2中,每个控件都有属于自己的...

网友评论

    本文标题:PyQT5--入门程序(联动器)体会信号与槽

    本文链接:https://www.haomeiwen.com/subject/ndzjzxtx.html