Я столкнулся с этой странностью при использовании декоратора PySide Slot. Если я декорирую свой метод, используя QtCore.Slot, и если я пытаюсь получить доступ к self.sender() внутри метода, я получаю None. Если я удалю декоратор QtCore.Slot(). Я правильно понимаю отправителя. Вот минимальный пример.
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class Worker(QObject):
def init(self):
print "worker is ready."
@Slot()
def work(self):
print "i am tired, %s" % self.sender()
app = QApplication(sys.argv)
button = QPushButton("Kick!")
button.show()
worker = Worker()
thread = QThread()
worker.moveToThread(thread)
thread.started.connect(worker.init)
button.clicked.connect(worker.work)
# app.connect(button, SIGNAL("clicked()"), worker, SLOT("work()"))
thread.start()
app.exec_()
sys.exit()
Однако, если я изменю подключение нового стиля на старый, как показано в строке с комментариями.
Оно работает. Может кто-нибудь объяснить такое поведение? Большое спасибо.