Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide2自定义信号错误:“0”;属性错误:';功能';对象没有属性';连接'&引用;_Python_Qt_Pyside2 - Fatal编程技术网

Python PySide2自定义信号错误:“0”;属性错误:';功能';对象没有属性';连接'&引用;

Python PySide2自定义信号错误:“0”;属性错误:';功能';对象没有属性';连接'&引用;,python,qt,pyside2,Python,Qt,Pyside2,这是我使用PySide的第三个项目,在尝试使用自定义信号和插槽时遇到了一个异常错误。下面是我正在研究的一个变体,它给了我AttributeError。我在其他项目中使用了类似的语法,没有任何问题,因此非常感谢您的帮助。我确实理解每个错误,我试图连接一个函数到一个插槽,但是如果我使用@Signal decorator,我会收到一个单独的错误,基本上说我不能使用它 from PySide2.QtWidgets import * from PySide2.QtGui import * from PyS

这是我使用PySide的第三个项目,在尝试使用自定义信号和插槽时遇到了一个异常错误。下面是我正在研究的一个变体,它给了我AttributeError。我在其他项目中使用了类似的语法,没有任何问题,因此非常感谢您的帮助。我确实理解每个错误,我试图连接一个函数到一个插槽,但是如果我使用@Signal decorator,我会收到一个单独的错误,基本上说我不能使用它

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


class TestSignal(QObject):
    signal = Signal(float)

    def __init__(self):
        QObject.__init__(self)

    def changed(self, test_value: float):
        self.signal.emit(test_value)


class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.signal = TestSignal()
        self.signal.changed.connect(self.test_slot) # this is where the error occurs
    
        self.central_widget = QWidget()

        self.go_button = QPushButton("Emit")
        self.go_button.clicked.connect(self.emit_signal)

        self.change_label = QLabel("Push Button")

        self.test_layout = QVBoxLayout()
        self.test_layout.addWidget(self.change_label)
        self.test_layout.addWidget(self.go_button)
        self.setCentralWidget(self.central_widget)

        self.central_widget.setLayout(self.test_layout)

        self.show()

    @Slot(float)
    def test_slot(self, test_value):
        self.change_label.setText("Emitted Signal successcully")

    def emit_signal(self):
        self.signal.changed()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Main()

    app.exec_()
    sys.exit(0)
信号称为“信号”,“改变”只是一种发出信号的方法。建议:使用更多描述性名称以避免此类混淆

class TestSignal(QObject):
    signal = Signal(float)

    def changed(self, test_value: float):
        self.signal.emit(test_value)


class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.signal = TestSignal()
        self.signal.signal.connect(self.test_slot)
    
        self.central_widget = QWidget()

        self.go_button = QPushButton("Emit")
        self.go_button.clicked.connect(self.emit_signal)

        self.change_label = QLabel("Push Button")

        self.test_layout = QVBoxLayout()
        self.test_layout.addWidget(self.change_label)
        self.test_layout.addWidget(self.go_button)
        self.setCentralWidget(self.central_widget)

        self.central_widget.setLayout(self.test_layout)

        self.show()

    @Slot(float)
    def test_slot(self, test_value):
        self.change_label.setText("Emitted Signal successcully {}".format(test_value))

    def emit_signal(self):
        self.signal.changed(5.0)
类测试信号(QObject):
信号=信号(浮动)
def已更改(自身,测试值:浮动):
自我信号发射(测试值)
类主(QMainWindow):
定义初始化(自):
QMainWindow.\uuuuu初始化\uuuuuu(自)
self.signal=TestSignal()
self.signal.signal.connect(self.test_插槽)
self.central_widget=QWidget()
self.go_按钮=QPushButton(“发射”)
self.go_按钮。点击。连接(self.emit_信号)
self.change_label=QLabel(“按钮”)
self.test_layout=QVBoxLayout()
self.test\u layout.addWidget(self.change\u标签)
self.test\u layout.addWidget(self.go\u按钮)
self.setCentralWidget(self.central\u小部件)
self.central\u widget.setLayout(self.test\u布局)
self.show()
@槽(浮动)
def测试_插槽(自身,测试_值):
self.change_label.setText(“发射信号成功{}”.format(测试_值))
def发射信号(自身):

self.signal.changed(5.0)
Ahh我明白了,谢谢你的帮助!我通常对它们使用更具描述性的名称,我只是快速地将其作为测试用例编写。为了在本例中澄清,您是否说QPushButton将有一个名为“clicked”的类信号,该信号是在类中其他地方定义的某个函数下发出的?