我正在阅读序列信息,并希望将其传递给Tkinter中的GUI。 这段代码工作正常,但是当我想使用canvas时(因为我会做一个仪表板类型的GUI),我没有在GUI上打印出来。
if __name__ == '__main__':
pass
import serial
from tkinter import *
import tkinter as tk
import tkinter.font as tkf
ser = serial.Serial('COM2')
ser.baudrate = 9600
def update():
c = StringVar()
c=ser.readline()
theta.set(c)
root.after(100,update)
root=Tk()
root.title("viento")
theta = StringVar()
w = Label(root, textvariable = theta, font ="Times 16 bold", fg="red")
w.pack()
root.after(100,update)
root.mainloop()
一旦我用
更改标签声明w=Canvas(root,width = 200, height= 100)
w.pack()
w.create_text(100,50,text=theta.get())
我得到一个空的GUI。有什么问题?
答案 0 :(得分:1)
据我所知,您不能使用StringVar
来设置Canvas上显示的文本。但是,您可以获取在画布上创建的文本的ID和re-configure it afterwards。
这样的事情:
def update():
w.itemconfigure(text_id, text=ser.readline())
root.after(100, update)
w = Canvas(root, width=200, height=100)
w.pack()
text_id = w.create_text(100, 50, text="")
答案 1 :(得分:0)
感谢您的帮助。 Jonrsharpe是对的。创建文本只执行一次,所以将该注释与Tobias结合,将该语句w.create_text(100,50,text = theta.get())移动到更新函数,然后我得到了我期待的内容。唯一的一个小评论是,值被覆盖了以下一个。不知道为什么。似乎新的更新值没有清除前一个值,并且在几个样本之后在GUI中无法读取值。 对我来说真的很小,因为我能够解决问题并设计我的Canvas GUI,现在已经启动并运行了。