【发布时间】:2021-09-06 17:56:53
【问题描述】:
当我运行此代码并抓住滚动条并快速上下移动时,屏幕加载屏幕上的项目非常慢。有什么办法可以加快屏幕更新内容的“刷新率”吗?
import tkinter as tk
root = tk.Tk()
container = tk.Frame(root)
canvas = tk.Canvas(container)
scrollbar = tk.Scrollbar(container, orient="vertical", command=canvas.yview)
scrollable_frame = tk.Frame(canvas)
scrollable_frame.bind("<Configure>",lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
row=0
for i in range(100):
tk.Label(scrollable_frame, text='test').grid(row=row, column=1)
tk.Label(scrollable_frame, text='test1').grid(row=row, column=2)
tk.Label(scrollable_frame, text='random').grid(row=row, column=3)
tk.Label(scrollable_frame, text='random1').grid(row=row, column=4)
tk.Label(scrollable_frame, text='random2').grid(row=row, column=5)
tk.Button(scrollable_frame, text='button').grid(row=row, column=6)
row=row+1
container.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
root.mainloop()
【问题讨论】:
-
你为什么要创建这么多小部件?很少需要超过 100 个小部件。现在您正在尝试创建 600 个小部件。我建议你重新设计你的程序。如果你真的需要制作那么多小部件,请使用
.after()来分块创建它们。 -
@TheLizzard 我的实际应用程序正在从 SQL 数据库中获取数据并将其呈现给用户。有时结果很长,需要 600 多个结果。我将如何将 .after() 合并到其中以使滚动更顺畅?谢谢
标签: python python-3.x tkinter