gpt4 book ai didi

python - 每当有来自串行端口 python 3.x 的新数据时,从串行数据更新 tkinter 标签

转载 作者:行者123 更新时间:2023-12-01 15:20:41 25 4
gpt4 key购买 nike

我遇到了这个问题,我无法在标签上显示任何值,我想在有新数据从串行端口传入时不断更新它。我是 python 新手,真的需要帮助。

import tkinter
import tkinter.messagebox
import serial
import time

ser = serial.Serial(
port='COM5',\
baudrate=9600,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=4)

class Menu:

def __init__(self):

self.main_window = tkinter.Tk()
self.main_window.title("Room Light System")
self.main_window.geometry("1200x600")


#Frames
self.frame_2 = tkinter.Frame(self.main_window, bg='Orange') # Receiving DATAs



#ReceiveLabel
self.ReceiveLabel = tkinter.Label(self.frame_2,\
text = 'Received DATAs',\
bg = 'White',\
height = 2, width = 20)


#Temperature
self.GetTempLabel = tkinter.Label(self.frame_2,\
text='Temperature :')
self.TempValue = tkinter.StringVar()

self.GetTempValueLabel = tkinter.Label(self.frame_2,bg = 'Green',\
textvariable = self.TempValue
)



#PACKING!!! F2

self.frame_2.pack()
self.frame_2.place(x=410, y=0, height=300, width=400)
#ReceiveLabel
self.ReceiveLabel.pack()
self.ReceiveLabel.place(x=100, y=10)
#Temperature
self.GetTempLabel.pack()
self.GetTempLabel.place(x=50, y=80, height=20, width=120)
self.GetTempValueLabel.pack()
self.GetTempValueLabel.place(x=200, y=80, height=20, width=50)


#main loop and quit
self.quitButton = tkinter.Button(self.main_window,\
text = 'Quit',
command = self.main_window.destroy,\
height = 2, width = 6)
self.quitButton.pack()

self.quitButton.place(x=200, y=500)


tkinter.mainloop()

def GetTemp(self):

data = bytearray()
while(1):
readline = ser.read(size=10)
if len(readline) > 0 :
data = readline
v = memoryview(data)
P = v.tobytes()
P = P.decode(encoding='UTF-8')
self.TempValue.set(P)

gui = Menu()
ser.close()

最佳答案

您可以在 _thread 模块的单独线程中运行您的 GetTemp() 方法。使用 Tkinter 方法 after() 调用线程。在下面的示例中,我用生成的随机数替换了您的 GetTemp()

import tkinter
import tkinter.messagebox
import time
import random
import _thread

class Menu:

def __init__(self):

self.main_window = tkinter.Tk()
self.main_window.title("Room Light System")
self.main_window.geometry("1200x600")


#Frames
self.frame_2 = tkinter.Frame(self.main_window, bg='Orange') # Receiving DATAs



#ReceiveLabel
self.ReceiveLabel = tkinter.Label(self.frame_2,\
text = 'Received DATAs',\
bg = 'White',\
height = 2, width = 20)


#Temperature
self.GetTempLabel = tkinter.Label(self.frame_2,\
text='Temperature :')
self.TempValue = tkinter.StringVar()

self.GetTempValueLabel = tkinter.Label(self.frame_2,bg = 'Green',\
textvariable = self.TempValue
)



#PACKING!!! F2

self.frame_2.pack()
self.frame_2.place(x=410, y=0, height=300, width=400)
#ReceiveLabel
self.ReceiveLabel.pack()
self.ReceiveLabel.place(x=100, y=10)
#Temperature
self.GetTempLabel.pack()
self.GetTempLabel.place(x=50, y=80, height=20, width=120)
self.GetTempValueLabel.pack()
self.GetTempValueLabel.place(x=200, y=80, height=20, width=50)


#main loop and quit
self.quitButton = tkinter.Button(self.main_window,\
text = 'Quit',
command = self.main_window.destroy,\
height = 2, width = 6)
self.quitButton.pack()

self.quitButton.place(x=200, y=500)


self.main_window.after(2000, _thread.start_new_thread, self.GetTemp, ())
tkinter.mainloop()

def GetTemp(self):

while(1):
value = random.random()
self.TempValue.set(str(value))
time.sleep(0.5)

gui = Menu()

关于python - 每当有来自串行端口 python 3.x 的新数据时,从串行数据更新 tkinter 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17463521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com