由于root. after(200,update),我的tkinter窗口感觉迟钝。我在tkinter窗口中显示了编码值和转速,扭矩值。我的问题是我的接口编码器作为中断和读取**转速和扭矩**值通过串行通信,所以我需要读取每200毫秒的值,我使用root. after(200,update).But它与编码值的问题(感觉粘滞在tkinter窗口)。
在谷歌了这么多线程可能是这个问题的解决方案后,我意识到.But我不知道如何使用线程的概念。所以我来这里寻求帮助。
提前谢谢。
以下是我的代码
import pigpio
import tkinter as tk
pos=0
rpm=0
torq=0
pow=0
def callback(way): #interrupt event sense on pin no 17,18 for encoder
global pos
global st
if st == 1:
pos += way
if pos >= 9999:
pos = 9999
if pos <= 0:
pos = 0
var.set(pos)
def rpm_update():
global rpm
-------------------
------------------- # code for read values from RPM card
var2.set(rpm)
def torq_update():
global torq
---------------------
--------------------- # code for read values from torque card
var3.set(torq)
def pow_update():
global rpm,torq,pow
---------------- # code for power calculation
-------------------
var4.set(pow)
def update():
rpm_update()
time.sleep(0.01)
torq_update()
time.sleep(0.01)
pow_update()
root.after(200,update)
path="/home/pi/logo.png"
root=tk.Tk()
img=ImageTk.PhotoImage(Image.open(path))
panel=tk.Label(root,image=img)
panel.pack()
panel.place(x=930,y=10,height=50,width=70)
root.title("Dynalec")
root.iconphoto(False,img)
root.geometry("1000x600")
-----------------------------
------------------------------ # tkinter window body
-----------------------------
decoder=rotary_encoder.decoder(pi, 17, 18, callback)
root.after(200,update)
root.mainloop()发布于 2020-10-06 19:52:53
首先重写update(),如下所示:
def update():
while True:
rpm_update()
time.sleep(0.01)
torq_update()
time.sleep(0.01)
pow_update()
time.sleep(0.2) # sleep for 200ms然后用threading.Thread(target=update, daemon=True).start()替换root.after(200, update)
#root.after(200,update)
threading.Thread(target=update, daemon=True).start()
root.mainloop()当然,您需要导入threading模块。
https://stackoverflow.com/questions/64225064
复制相似问题