Найти - Пользователи
Полная версия: pyqt и Thread
Начало » GUI » pyqt и Thread
1
le
Я в питоне новичек, так что может что то не понимаю. Суть проекта. Есть клиентская часть софта написаный с помощью pyqt. Она подключается к серверу и принимает от него сообщения. Приходящии сообщения должны отображаться в “QTableWidget”

Для добавления в этот список написан метод у основного класса:

def addLineNew(self,line):
print line + "newline\n"
row = self.fileList.rowCount()
print row
self.fileList.setRowCount(row + 1)
self.fileList.setItem(row, 0, QtGui.QTableWidgetItem("03.04.10 15:18"))
self.fileList.setItem(row, 1, QtGui.QTableWidgetItem("Normal"))
self.fileList.setItem(row, 2, QtGui.QTableWidgetItem(line))
Для приема сообщений от сервера написан другой класс который открывает новый поток.
class Receive_data(Thread):
def __init__(self):
Thread.__init__(self)
self._main = signalview()
self._want_abort = 0
def run(self):
HOST = "172.16.1.24"
PORT = 9000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
self._want_abort = 0
while 1:
if self._want_abort:
sock.close()
return
else:
self.receives_data = sock.recv(1024)
temp=self.receives_data.split("#")
for line in temp:
print line + "\n"
self._main.addLineNew(line)
time.sleep(0.2)
sock.close()
Так вот, вызываю метод self._main.addLineNew(line) происходит вызов этой функции (в консоль выводиться отлаживаема информация “ print line + ”newline\n“”, но новые строки в QTableWidget не добавляются, хотя если вызывать из других мест этот метод, все ок. подскажите что может быть не так, и как сделать чтобы оно заработало?
le
Так все, сам разобрался. Юзал Queue.

При приеме данных вместо вызова метода делал
queue.put(line)
а функцию addLineNew переписал
def addLineNew(self):
while True:
line = queue.get()
row = self.fileList.rowCount()
self.fileList.setRowCount(row + 1)
self.fileList.setItem(row, 0, QtGui.QTableWidgetItem("03.04.10 15:18"))
self.fileList.setItem(row, 1, QtGui.QTableWidgetItem("Normal"))
self.fileList.setItem(row, 2, QtGui.QTableWidgetItem(line))
time.sleep(0.1)
и запустил ее отдельным потоком после подключения к сети.
def connect(self):
rec = Receive_data().start()
t = Thread(target=self.addLineNew)
t.setDaemon(True)
t.start()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB