提问人:Patrick T. 提问时间:11/15/2023 更新时间:11/15/2023 访问量:47
条目外的较大 tkinter 表变得非常慢
Larger tkinter table out of Entrys becoming very slow
问:
我想在一种表格中显示数据,可在 y 上滚动并在 x 方向上调整大小。 为了在单个单元格中显示文本,我使用条目小部件。 我想用一条细线将 x 和 y 方向上的单元格分开 我想要在细胞中另外一个框架,我可以染色
它应该看起来像我下面的代码。 问题是,随着数据的增加,窗口变得非常慢 (窗口移动,窗口大小调整) 滚动功能非常不流畅 (使用鼠标滚轮比移动滚动条更好一点)
有没有办法让它更流畅,或者 Python / tkinter 只是错误的工具? 为什么 Excel 可以如此轻松地处理大表?
import tkinter as tk
root = tk.Tk()
root.geometry("600x350")
canvas = tk.Canvas(root)
scrollbar = tk.Scrollbar(root, command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y")
canvas.pack(fill="both", expand=True)
frame = tk.Frame(root, bg="black")
canvas.create_window(0, 0, anchor="nw", window=frame, tags=("inner_frame",))
frame.columnconfigure(1, weight=1)
frame.columnconfigure((0,1,2,3,4,5,6,7,8,9), minsize=40)
innerborders = []
c = 0
for i in range(150):
for j in range(10):
innerborders.append(tk.Frame(frame, bg="white"))
innerborders[c].grid(column=j, row=i, sticky="nesw", padx=(0, 1), pady=(0, 1))
entry = tk.Entry(innerborders[c],width=1, disabledbackground="white", disabledforeground="black", borderwidth=0)
entry.insert(0, "Entry")
entry["state"]="disabled"
entry.pack(padx=2, pady=2, fill="both")
c+=1
innerborders[11]["bg"] = "red"
innerborders[32]["bg"] = "green"
innerborders[34]["bg"] = "yellow"
innerborders[41]["bg"] = "blue"
def canvas_resize(event):
border = int(canvas.cget("borderwidth"))
event.widget.itemconfigure("inner_frame", width=event.width-border*2)
def frame_resize(event):
canvas.configure(scrollregion=canvas.bbox("all"))
def _on_mousewheel(event):
if not scrollbar.get()[0] == 0.0 or not scrollbar.get()[1] == 1.0:
canvas.yview_scroll(int(-1 * (event.delta / 60)), "units")
canvas.bind("<Configure>", canvas_resize)
frame.bind("<Configure>", frame_resize)
frame.bind_all("<MouseWheel>", _on_mousewheel)
root.mainloop()
答: 暂无答案
评论