你需要一些帮助我试图在收到服务器发送的某种类型的信息时显示一个Window弹出窗口。问题是从服务器接收数据的方法是一个线程,所以我在从一个线程修改MainWindow时遇到问题,这就是为什么我试图从线程向另一个方法User发送信号的原因(参见下面的代码) ),所以我不修改一个线程的窗口。我收到以下错误:
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()
不介意功能信号他们只是向服务器发送问题是问题是当服务器发回我的用户应该收到的信息并在这种情况下做一些事情时打开一个窗口。 (我的小部件是Loggin(),我想要显示的那个被设置为类Loggin()的属性,并且它被称为main。
由于
答案 0 :(得分:2)
如果您希望它包含信号,则User
类必须从QObject
继承。因此,类定义的第一行应为class User(QtCore.QObject):
。