当信号找不到其

2024-04-25 20:21:31 发布

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

单击按钮会使进程崩溃。有什么问题吗?你知道吗

from PySide import QtCore, QtGui

class button(QtGui.QPushButton):
    def __init__(self, parent=None):
        super(button, self).__init__(parent) 
        self.clicked.connect(self.click)
        self.show()

    def click(self):
        self.emit(QtCore.SIGNAL('customSignal'), 'String Argument')

btn = button()

class label(QtGui.QLabel):
    def __init__(self, parent=None):
        super(label, self).__init__(parent) 
        self.connect(btn, QtCore.SIGNAL('customSignal'), self.Function) 
        self.show()   

    @QtCore.Slot(str)
    def Function(self, arg=None):
        print 'Function arg: %r'%arg

lbl = label()

Tags: selfnoneinitdefconnectargfunctionbutton
1条回答
网友
1楼 · 发布于 2024-04-25 20:21:31

不需要@QtCore.Slot装饰器:

from PyQt4 import QtCore, QtGui
import sys


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)

    class button(QtGui.QPushButton):
        def __init__(self, parent=None):
            super(button, self).__init__(parent) 
            self.clicked.connect(self.click)
            self.show()

        def click(self):
            self.emit(QtCore.SIGNAL('customSignal'), 'String Argument')

    btn = button()

    class label(QtGui.QLabel):
        def __init__(self, parent=None):
            super(label, self).__init__(parent) 
            self.connect(btn, QtCore.SIGNAL('customSignal'), self.method) 
            self.show()   

        def method(self, arg=None):
            print 'method arg: %r'%arg

    lbl = label()


    sys.exit(app.exec_())

=====================

from PySide import QtCore, QtGui

def function(arg=None):
    print 'function arg: %r'%arg

class button(QtGui.QPushButton):
    def __init__(self, parent=None):
        super(button, self).__init__(parent) 
        self.clicked.connect(self.click)
        self.show()

    def click(self):
        self.emit(QtCore.SIGNAL('customSignal'), 'String Argument')

btn = button()

class label(QtGui.QLabel):
    def __init__(self, parent=None):
        super(label, self).__init__(parent) 
        self.connect(btn, QtCore.SIGNAL('customSignal'), function) 
        self.show()   

lbl = label()

======

from PyQt4 import QtCore, QtGui
import datetime

def getDatetime():
    return '%s'%datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')

class CustomEvent(QtCore.QEvent):
    _type = QtCore.QEvent.registerEventType()

    def __init__(self, name=None):
        QtCore.QEvent.__init__(self, CustomEvent._type)


class label(QtGui.QLabel):
    def __init__(self, parent=None):
        super(label, self).__init__(parent) 

    def customEvent(self, event):
        print '....customEvent %s if event.type(): %s == CustomEvent._type: %s'%(event, event.type(), CustomEvent._type)
        if event.type() == CustomEvent._type:
            self.setText(getDatetime() )


class button(QtGui.QPushButton):
    def __init__(self, parent=None):
        super(button, self).__init__(parent) 
        self.clicked.connect(self.onClick)
        self.show()

    def onClick(self):
        event = CustomEvent(name = 'Event Name')
        QtCore.QCoreApplication.postEvent(lbl, event)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    btn = button()
    btn.show()
    lbl = label()
    lbl.show()
    sys.exit(app.exec_())

相关问题 更多 >