Задержка полосы прокрутки? - PullRequest
0 голосов
/ 14 апреля 2020

Я начинаю изучать 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()
...