如何使 Tkinter 滚动条实时编辑



我正在尝试创建一个每秒不断添加另一行文本的滚动条。我希望它"实时"工作并继续添加另一行文本。

from tkinter import *
import time
master = Tk()
while True:
scrollbar = Scrollbar(master)
scrollbar.pack(side=RIGHT, fill=Y)
listbox = Listbox(master, yscrollcommand=scrollbar.set)
listbox.insert(END, "Another linen")
listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=listbox.yview)
time.sleep(1)

您不应该在任何 GUI 框架(任何语言(中使用while Truesleep,因为它可以阻止mainloop并且无法从系统中获取事件,将它们发送到小部件并重绘窗口 - 所以窗口冻结。

每个框架都有一些定期运行代码的方法(即。timer(。

tkinter为此root.after(milliseconds, function_name)

#from tkinter import * # PEP8: `import *` is not preferred
import tkinter as tk
import time
# --- function ---
def add_line():
listbox.insert('end', time.strftime("%H:%M:%S"))
root.after(1000, add_line)  # run `add_line` again after 1000ms (1s)
# --- main ---
root = tk.Tk()
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side='right', fill='y')
listbox = tk.Listbox(root, yscrollcommand=scrollbar.set)
listbox.pack(side='left', fill='both')
scrollbar.config(command=listbox.yview)
add_line()  # run `add_line` first time
root.mainloop()

最新更新