pyqt5学习(1)自定义信号

    pyqt5与老的pyqt4很多地方不一样,慢慢摸索.

    qt使用信号和槽,这个叫法 蛮有意思的,不过原理和其它语言的差不多.

    早上研究了下如何自定义信号并处理

            

    书中(P95),原例是pyqt4,现环境是py3.5+pyqt5,我做了修改

    左侧dial转动值,与右侧spinbox的值保持同步.另外,在dial中自定义过零刻度信号,指针到零刻度时发出信号.

    

import sys
from PyQt5.QtCore import * 
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ZeroSpinBox(QSpinBox):
    zeros = 0
    atzero = pyqtSignal(int) #自定义信号,参数即在zeros,指针过零的次数

    def __init__(self,parent=None):
        super(ZeroSpinBox,self).__init__(parent)
        self.valueChanged.connect(self.zerochk) #值改变,要检查

    def zerochk(self):
        if self.value() == 0:
            self.zeros += 1
            self.atzero.emit(self.zeros) #发射信号了

class Form(QDialog):
    def __init__(self,parent=None):
        super(Form,self).__init__(parent)
        self.dial = QDial()
        self.dial.setNotchesVisible(True)
        self.spinbox = ZeroSpinBox()
        layout = QHBoxLayout()
        layout.addWidget(self.dial)
        layout.addWidget(self.spinbox)
        self.setLayout(layout)
        self.dial.valueChanged.connect(self.spinbox.setValue)
        self.spinbox.valueChanged.connect(self.dial.setValue)
        self.spinbox.atzero.connect(self.printzero) #这里处理自定义信号 

    def printzero(self,zerocount): #接受参数别忘了
        print ("ZeroSpinBox has been at zero %d times"%zerocount)
        

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()        

 
  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值