我希望接收到的数据以tk窗口为中心而不是从顶部打印。所以我想使用TEXT小部件的Label小部件instad编写代码。(从顶部打开TEXT小部件,在tk窗口小心打开数据)如果窗口小部件具有比文本需要更多的空间,则标签窗口小部件具有“ANCHOR”选项控制文本所在的位置。默认值为anchor = CENTER,它将文本置于可用空间的中心。 但是在我的代码中我总是一直删除和插入数据,根据我的知识删除和插入选项只在Text小部件中,是否可以在Label小部件中。 请帮帮我。 我尝试使用LABEL小部件更改我的代码,但是没有成功。有人可以帮我改变我的代码使用标签小部件。 感谢。
import serial
import threading
import Queue
import Tkinter as tk
from Tkinter import *
class SerialThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
s = serial.Serial('COM11',9600)
while True:
if s.inWaiting():
text = s.readline(s.inWaiting())
self.queue.put(text)
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.geometry("1360x750")
frameLabel = tk.Frame(self, padx=40, pady =40)
self.text = tk.Text(frameLabel, wrap='word', font='TimesNewRoman 40',
bg=self.cget('bg'), relief='flat')
frameLabel.pack()
self.text.pack()
self.queue = Queue.Queue()
thread = SerialThread(self.queue)
thread.start()
self.process_serial()
def process_serial(self):
firstitem = True
while self.queue.qsize():
try:
new = self.queue.get()
if firstitem:
self.text.delete(1.0, 'end')
firstitem = False
self.text.insert('end', new)
except Queue.Empty:
pass
self.after(100, self.process_serial)
app = App()
app.mainloop()
答案 0 :(得分:2)
Tkinter Label小部件有一个text
选项,用于指示正在显示的文本。如果要更改窗口小部件显示的所有内容,请替换
self.text = tk.Text(frameLabel, ...)
# ...
new = self.queue.get()
self.text.delete(1.0, 'end')
self.text.insert('end', new)
有了这个:
self.label = tk.Label(frameLabel, ...)
# ...
new = self.queue.get()
self.label.config(text=new)