QtCore.SIGNALS not working on my code

2019-09-18 12:12发布

问题:

Can someone me explane how should like my code, or what I'm doing wrong ? I want to use button 'btn_run' to run 'view_splash' function. But somethink going wrong, but 'view_splash' won't start. It show me no errors.

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:

You need to create and connect the signals differently.

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)


标签: python pyqt4