Здравствуйте! Сталкнулся с такой проблемой: при прокрутке скроллбаром или колесиком мыши canvas.create_window в котором находятся Frame , Label и Button появляются артефакты как на скриншотах ниже где-то на секунду. В основном заметно при горизонтальной прокрутке скроллбаром.
Это проблема чисто Tkinter и попробовать перейти на PyQt? Или я что-то сделал не так?
Горизонтальная прокрутка:
Вертикальная прокрутка:
Кусок создания Canvas
self.right_frame = tk.Frame(self)
self.right_frame_yscroll = tk.Frame(self)
self.scroll_x = tk.Scrollbar(self.right_frame, orient=tk.HORIZONTAL)
self.scroll_y = tk.Scrollbar(self.right_frame_yscroll, orient=tk.VERTICAL)
self.canvas = tk.Canvas(self.right_frame,
xscrollcommand=self.scroll_x.set,
yscrollcommand=self.scroll_y.set, highlightthickness=0, bg="#E8E8E8")
self.scroll_x.config(command=self.canvas.xview)
self.scroll_y.config(command=self.canvas.yview)
self.grid_of_data = tk.Frame(self.canvas, bg='#E8E8E8')
self.canvas.create_window((0, 0), window=self.grid_of_data,
anchor=tk.N + tk.W)
self.scroll_x.pack(side=tk.BOTTOM, fill=tk.X, anchor=tk.S)
self.scroll_y.pack(side=tk.LEFT, fill=tk.Y)
self.canvas.pack(side=tk.BOTTOM, expand=1, fill=tk.BOTH)
self.bind("<Configure>", self.resize)
self.canvas.bind("<Enter>", self.on_binds) #вертикальная прокрутнка колесиком мыши при нахождении в области canvas
self.canvas.bind("<Leave>", self.off_binds)
Функция resize:
def resize(self, event=None):
region = self.canvas.bbox(tk.ALL)
self.canvas.configure(scrollregion=region)
def on_binds(self, event):
self.idbind = self.bind_all("<MouseWheel>", self._on_mousewheel)
def off_binds(self, event=None):
self.unbind_all("<MouseWheel>")
def _on_mousewheel(self, event):
self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")