PyQt4信号和QObject.发射()

2024-09-24 06:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习使用python和pyqt4进行GUI编程 这是我正在开发的学习信号和插槽的应用程序。 这是一个简单的应用程序,它有一个spinbox和一个使用pyqt信号连接在一起的对话框。但我添加了一个类zerospinbox,它应该每次spinbox或dialogbox值变为零时打印消息到控制台,并使用,QObject.发射()信号。 我按照教程书写的,无论我做什么,都不会显示按摩。所以请看一下代码,告诉我哪里错了:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        dial = QDial()
        dial.setNotchesVisible(True)
        spinbox = QSpinBox()

        layout = QHBoxLayout()
        layout.addWidget(dial)
        layout.addWidget(spinbox)
        zerospinbox = ZeroSpinBox()
        self.setLayout(layout)

        self.connect(dial, SIGNAL("valueChanged(int)"),
                     spinbox,SLOT("setValue(int)"))
        self.connect(spinbox, SIGNAL("ValueChanged(int)"),
                     dial,SLOT("setValue(int)"))
        self.setWindowTitle("Signal and Slots")
        zerospinbox = ZeroSpinBox()

        self.connect(zerospinbox, SIGNAL("atzero"),self.announce)        

    def announce(self,zeros):
        print("ZeroSpinBox has been at zero %d times" % zeros)        

class ZeroSpinBox(QSpinBox):

    zeros=0


    def __init__(self, parent=None):
        super(ZeroSpinBox, self).__init__(parent)
        self.connect(self, SIGNAL("valueChanged(int)"), self.checkzero)



    def checkzero(self):
        if self.value()==0:
            self.zeros +=1
            self.emit(SIGNAL("atzero"),self.zeros)

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

谢谢


Tags: importselfsignal信号initdefconnectzeros
1条回答
网友
1楼 · 发布于 2024-09-24 06:29:26

您创建了三个微调框,但只将其中的第一个添加到对话框布局中。唯一显示的是QSpinBox,而不是ZeroSpinBox。另外两个被删除而不显示。在

您使用了旧样式的signal/slot语法,并且出现了拼写错误,因此连接无法正常工作。不要使用这种过时的旧式语法。它非常容易出错,并且在失败时不会引发异常。始终使用新样式语法:

        dial.valueChanged[int].connect(spinbox.setValue)
        spinbox.valueChanged[int].connect(dial.setValue)

您创建了一个并不需要的spinbox子类。在主类中执行所有操作都要简单得多:

^{pr2}$

相关问题 更多 >