QtCore.SIGNALS не работает над моим кодом

Может кто-нибудь мне объяснить, как должен понравиться мой код, или что я делаю не так? Я хочу использовать кнопку "btn_run" для запуска функции "view_splash". Но что-то идет не так, но view_splash не запускается. Это показывает мне без ошибок.

import sys
from PyQt4 import QtGui, QtCore
import time


class Window(QtGui.QMainWindow):

 def __init__(self):
    super(Window, self).__init__()
    self.setGeometry(500, 150, 500, 600)
    self.setWindowTitle('Test GUI')

    self.threadclass = AThread()
    self.connect(self.threadclass, QtCore.SIGNAL("view_splash()"), self.view_splash)

    self.home()

 def home(self):
    btn_run = QtGui.QPushButton("Run", self)
    self.threadclass = AThread()
    btn_run.clicked.connect(self.threadclass.start)
    btn_run.resize(120, 40)
    btn_run.move(190, 540)

    self.show()

 def view_splash(self):
    print('test')
    label = QLabel("<font color=red size=10<b>" + "SPLASH" + "</b></font>")
    label.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint)
    label.show()
    QtCore.QTimer.singleShot(5000, label.close)


class AThread(QtCore.QThread):
 def __init__(self):
    super(AThread, self).__init__()

 def run(self):
    print(1)
    print(2)
    time.sleep(5)
    print(3)
    print(4)
    self.emit(QtCore.SIGNAL("view_splash()"))


 app = QtGui.QApplication(sys.argv)
 GUI = Window()
 sys.exit(app.exec_())

1 ответ

Решение

Вам нужно создавать и подключать сигналы по-разному.

class AThread(QtCore.QThread):
    view_splash = QtCore.pyqtSignal()

    def run(self):
        ...
        self.view_splash.emit()

class Window(QtGui.QMainWindow):

    def __init__(self):
        ...
        self.threadclass.view_splash.connect(self.view_splash)
Другие вопросы по тегам