Я начинаю изучать tkinter и хотел использовать полосу прокрутки. Я реализовал их, но заметил, что при прокрутке происходит задержка, или контент зависает и растягивается, хотя со временем возвращается к нормальному состоянию. Это нормально, или это плохая оптимизация кода, или, возможно, мои спецификации p c просто отстой? я также заметил, что при использовании текста, а не изображений, меньше задержек, потому что я использую много изображений в tkinter. Ваша помощь будет высоко оценена, чтобы помочь новичку. Спасибо!
from tkinter import *
from PIL import ImageTk, Image
screen=Tk()
class ScrolledFrame(Frame):
def __init__(self, parent, vertical=True, horizontal=False):
super().__init__(parent)
# canvas for inner frame
self._canvas = Canvas(self)
self._canvas.grid(row=0, column=0, sticky='news') # changed
# create right scrollbar and connect to canvas Y
self._vertical_bar = Scrollbar(self, orient='vertical', command=self._canvas.yview)
if vertical:
self._vertical_bar.grid(row=0, column=1, sticky='ns')
self._canvas.configure(yscrollcommand=self._vertical_bar.set)
# create bottom scrollbar and connect to canvas X
self._horizontal_bar = Scrollbar(self, orient='horizontal', command=self._canvas.xview)
if horizontal:
self._horizontal_bar.grid(row=1, column=0, sticky='we')
self._canvas.configure(xscrollcommand=self._horizontal_bar.set)
# inner frame for widgets
self.inner = Frame(self._canvas)
self._window = self._canvas.create_window((0, 0), window=self.inner, anchor='nw')
# autoresize inner frame
self.columnconfigure(0, weight=1) # changed
self.rowconfigure(0, weight=1) # changed
# resize when configure changed
self.inner.bind('<Configure>', self.resize)
self._canvas.bind('<Configure>', self.frame_width)
def frame_width(self, event):
# resize inner frame to canvas size
canvas_width = event.width
self._canvas.itemconfig(self._window, width=canvas_width)
def resize(self, event=None):
self._canvas.configure(scrollregion=self._canvas.bbox('all'))
def start_boolean_module():
global bool,fwd
bool =Toplevel(screen)
bool.geometry("900x900")
bool.iconbitmap('icon.ico')
Label(bool, text="Welcome " + "name" + " to your Boolean Lesson!",
font=("Calibri", "13", "bold")).pack()
window = ScrolledFrame(bool)
window.pack(expand=True, fill='both')
lbl = LabelFrame(window.inner, padx=80, pady=80)
lbl.pack()
Label(lbl, text="""The bool() method is used to return or convert a value to a Boolean value.
A Boolean variable has only two possible values: "True" or "False".
These values can also be represented as ' or 0.The boolean syntax is "bool([x])" """, font=("13")).pack()
b_1 = Image.open("b_1.png")
b_1 = b_1.resize((600, 100), Image.ANTIALIAS)
b_1 = ImageTk.PhotoImage(b_1)
b_1_image = Label(lbl, image=b_1)
b_1_image.image = b_1
b_1_image.pack()
Label(lbl,
text="""\n\nIn Python you will learn that there are many logical operators that can be used with thier respective character.""",
anchor=W, font=("13")).pack()
table_b = Image.open("table_b.PNG")
table_b = table_b.resize((600, 200), Image.ANTIALIAS)
table_b = ImageTk.PhotoImage(table_b)
table_b_image = Label(lbl, image=table_b)
table_b_image.image = table_b
table_b_image.pack()
table_summ_i = Image.open("table_summ.png")
table_summ_i = table_summ_i.resize((600, 600), Image.ANTIALIAS)
table_summ_i = ImageTk.PhotoImage(table_summ_i)
table_summ_image = Label(lbl, image=table_summ_i)
table_summ_image.image = table_summ_i
table_summ_image.pack()
Label(lbl,
text="""\n\nBOOLEAN in if statements.""",
anchor=W, font=("20")).pack()
ex_2 = Image.open("example_2.png")
ex_2 = ex_2.resize((547, 150), Image.ANTIALIAS)
ex_2 = ImageTk.PhotoImage(ex_2)
ex_2_i = Label(lbl, image=ex_2)
ex_2_i.image = ex_2
ex_2_i.pack()
start_boolean_module()
screen.mainloop()