从线程发送信号时出错

Error sending signals from thread

您好,需要一些帮助 我正在尝试在收到服务器发送的某种类型的信息时显示 Window 弹出窗口。问题是从服务器接收数据的方法是线程,所以我在从线程修改 MainWindow 时遇到问题,这就是为什么我试图从线程发送信号到 [=] 中的另一个方法20=] 用户(见下面我的代码),所以我不修改线程中的 window。我收到以下错误:

TypeError: User cannot be converted to PyQt4.QtCore.QObject in this context

我不知道这是否是解决问题的正确方法,所以如果有更好的方法,我将不胜感激您的帮助,代码如下:

class User:
    signal1 = QtCore.pyqtSignal()

    def __init__(self, usuario):
        self.usuario = usuario
        self.host = '127.0.0.1'
        self.port = 3490
        self.user = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Socket cliente
        try:                
            self.thread_wait_server = threading.Thread(target=self.wait_server)
            self.thread_wait_server.start()               

        except socket.error:
            print("No fue posible realizar la conexión")
            sys.exit()
        self.initUI()

    def initUI(self):
        app = QtGui.QApplication(sys.argv)
        self.login = interfaz.Loggin()
        self.login.show()
        self.signal1.connect(self.showMain)
        self.login.crear.trigger.connect(self.signal)
        self.login.trigger1.connect(self.signal2)
        app.exec_()

    def signal(self):
        info = self.login.crear.userPassword()
        info1 = pickle.dumps(info)
        self.user.sendall(info1)

    def signal2(self):
        info2 = self.login.comprobar()
        info3 = pickle.dumps(info2)
        self.user.sendall(info3)
        print('sendall')

    def wait_server(self):
        self.conectar()

    def conectar(self):
        self.user.connect((self.host, self.port))
        self.listener = threading.Thread(target=self.listen, args=())
        self.listener.Daemon = True
        self.listener.start()

    def listen(self):
        while True:

            data = self.user.recv(1024)
            print('received')
            print(data)
            if data:
                info = pickle.loads(data)
                if info == 'usuario_valido':
                    self.signal1.emit()
                    print('mainshow')
                    #self.login.exit()

    def showMain(self):
        self.login.main.show()

不要介意功能信号,它们只是将东西发送到服务器,问题出在当服务器发回我的用户应该接收的信息时监听的方法,并在这种情况下做一些事情打开一个 window. (我的小部件是 Loggin(),我想显示的那个被设​​置为 class Loggin() 的一个属性,它被称为 main.

谢谢

class User 必须继承自 QObject 如果你想让它包含一个信号。所以 class 定义的第一行应该是 class User(QtCore.QObject):.