我的 tkinter 画布滚动条非常慢,因为有很多矩形我需要解决

问题描述 投票:0回答:1

来自programm的图像,我想解决移动滚动条时的滞后问题我通过tkinter canvas python制作了很多矩形,当我移动滚动条以显示所有矩形时,它非常慢并且非常滞后有人可以帮助我吗?

我尝试了很多次但没有成功我尝试了很多代码......

from threading import Thread
from tkinter import ttk
import tkinter as tk
root = tk.Tk()
root.title('Full Window Scrolling X Y Scrollbar Example')
root.geometry("1280x1900")
main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH,expand=1)
sec = tk.Frame(main_frame)
sec.pack(fill=tk.X,side=tk.BOTTOM)
my_canvas = tk.Canvas(main_frame,bg="white")
my_canvas.pack(side=tk.LEFT,fill=tk.BOTH,expand=1)
x_scrollbar = ttk.Scrollbar(sec,orient=tk.HORIZONTAL,command=(my_canvas.xview))
square_size = 10
for i in range(0, 1000, square_size):
    for j in range(0, 1300, square_size):
        my_canvas.create_rectangle(i, j, i + square_size, j + square_size, outline='black')
x_scrollbar.pack(side=tk.BOTTOM,fill='x')
y_scrollbar = ttk.Scrollbar(main_frame,orient=tk.VERTICAL,command=(my_canvas.yview))
y_scrollbar.pack(side=tk.RIGHT,fill='y')
my_canvas.configure(xscrollcommand=x_scrollbar.set)
my_canvas.configure(yscrollcommand=y_scrollbar.set)
second_frame = tk.Frame(my_canvas)
def on_frame_configure(event):
    my_canvas.configure(scrollregion=my_canvas.bbox("all"))

main_frame.bind("<Configure>", on_frame_configure)

root.mainloop()
python tkinter canvas scrollbar ttk
1个回答
0
投票

有同样的问题,Tkinter 画布在尝试处理大量矩形或任何东西时出现滞后,事实上是因为画布试图同时渲染所有矩形。这会导致滚动延迟,因为画布必须更新所有项目的视图,这会减慢滚动速度。

尝试渲染画布视口中当前可见的矩形。使用“检查”选项卡,因此不必预先绘制每个矩形,而是专注于动态更新画布以仅显示位于可见区域内的那些矩形。当用户滚动或调整窗口大小时,您将清除画布并仅重绘新视口中可见的矩形。因此,解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.