从线程发送信号时出错
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):
.
您好,需要一些帮助 我正在尝试在收到服务器发送的某种类型的信息时显示 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):
.