Я пишу код на Python, чтобы создать графический интерфейс, управляющий электронной доской. Я помещал кнопки в графический интерфейс и отправлял команды, нажимая на него. Эта часть работает. Но мне нужно получить информацию, поступающую с доски, чтобы изменить некоторые вещи в графическом интерфейсе. Именно этой части мне это не удается. Я нашел несколько советов в this question, что позволяет мне читать COM-порт без GUI. Когда я пытаюсь добавить окно с полем ввода и обновить его с помощью входящих значений, я ничего не вижу.
Вот мой код:Последовательная связь с Tkinter
import serial
import threading
from time import sleep
from Tkinter import*
import sys
wind=Tk()
global var
var=StringVar(wind)
var.set("value 1")
entry_COM=Entry(wind,textvariable=var)
entry_COM.place(x=0,y=0,width=100,height=50)
ser = serial.Serial(port='COM1',baudrate=115200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=0)
global thread
thread= None
stop_task = threading.Event()
def do_task():
global var
var.set("value 2")
for i in xrange(1):
if stop_task.is_set():
break
print(i)
sleep(1)
while True:
byte = ser.read(1) # No need for a loop here, read(1) returns a length 1 string
character = byte # I'm not familiar with the serial module, but I think this isn't needed
if character == 'S':
# We check that we are not executing the task already, and if so we handle it accordingly
if thread:
print('Error: a task is already running!')
continue
# Start the task in a thread
stop_task.clear()
thread = threading.Thread(target=do_task)
thread.start()
elif character == 'K':
print('K received -> BREAK FROM TASK')
if thread:
stop_task.set()
thread = None
elif character == 'E':
ser.close()
print "closed"
try:
wind.destroy()
except:
pass
sys.exit()
wind.mainloop()
Когда я запускаю его, окно не открывается, но остальное работает отлично. У вас есть подсказки для меня?
возможно дубликат [Динамически обновления Tkinter на основе последовательных данных] (http://stackoverflow.com/questions/10574821/dynamically-updating-tkinter-window-based-on-serial-data) –