Полоса прокрутки холста tkinter неактивна - PullRequest
0 голосов
/ 02 августа 2020

Я пробовал следовать нескольким руководствам о том, как заставить холст прокручиваться, но он всегда оказывается серым. Я попытался добавить область прокрутки к холсту, но я этого не понял и дошел только до того, что он не стал серым, но по-прежнему ничего не делал.

Мой код будет по-прежнему неактивным):

self.main_window = Tk()
        self.root = Frame(self.main_window, bg="white")
        self.root.pack(fill=BOTH, expand=1)

        # TOP SECTION
        self.top = Frame(self.root, bg="white")
        self.top.pack(fill=BOTH, expand=1)
        Label(self.top, text="#########################################").pack()

        # BOTTOM SECTION
        self.bottom = Frame(self.root, bg="white")
        self.bottom.pack(fill=BOTH, expand=1)

        # BOTTOM-LEFT SECTION
        self.canvas = Canvas(self.bottom, bg="white")
        self.canvas.pack(fill=BOTH, expand=1, side=LEFT)
        self.left = Frame(self.canvas)
        self.left.pack(fill=BOTH, expand=1)
        left_scroll = Scrollbar(self.left, orient=VERTICAL)
        left_scroll.pack(side=RIGHT, fill=Y)
        left_scroll.config(command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=left_scroll.set)
        for root, dirs, files in os.walk("C:\\", topdown=True):
            full = dirs + files
            for i in full:
                Button(self.left, text=i, bg="white", anchor="w", relief=SOLID, borderwidth=0).pack(fill=BOTH)
            break

        # BOTTOM-RIGHT SECTION
        self.right = Frame(self.bottom, bg="white")
        self.right.pack(fill=BOTH, expand=1, side=RIGHT)
        Label(self.right, text="##########################").pack()
        Label(self.right, text="##########################").pack()

        self.main_window.mainloop()

1 Ответ

4 голосов
/ 02 августа 2020

Вы не должны использовать pack(), чтобы поместить фрейм self.left в self.canvas, вместо этого используйте self.canvas.create_window(0, 0, window=self.left, anchor='nw').

Также вы не должны помещать полосу прокрутки в фрейм self.left, поместите вместо этого поместите его в рамку self.bottom и упакуйте его в сторону LEFT.

Наконец, вам нужно обновить scrollregion из self.canvas, чтобы полоса прокрутки работала.

Ниже это модифицированный код на основе вашего:

    self.main_window = Tk()
    self.root = Frame(self.main_window, bg="white")
    self.root.pack(fill=BOTH, expand=1)

    # TOP SECTION
    self.top = Frame(self.root, bg="white")
    self.top.pack(fill=BOTH, expand=1)
    Label(self.top, text="#########################################").pack()

    # BOTTOM SECTION
    self.bottom = Frame(self.root, bg="white")
    self.bottom.pack(fill=BOTH, expand=1)

    # BOTTOM-LEFT SECTION
    self.canvas = Canvas(self.bottom, bg="white")
    self.canvas.pack(fill=BOTH, expand=1, side=LEFT)
    self.left = Frame(self.canvas)
    #self.left.pack(fill=BOTH, expand=1)
    self.canvas.create_window(0, 0, window=self.left, anchor='nw') ###
    left_scroll = Scrollbar(self.bottom, orient=VERTICAL) ### self.left to self.bottom
    left_scroll.pack(side=LEFT, fill=Y) ### side=RIGHT to side=LEFT
    left_scroll.config(command=self.canvas.yview)
    self.canvas.configure(yscrollcommand=left_scroll.set)
    for root, dirs, files in os.walk("C:\\", topdown=True):
        full = dirs + files
        for i in full:
            Button(self.left, text=i, bg="white", anchor="w", relief=SOLID, borderwidth=0).pack(fill=BOTH)
        break
    ### update scrollregion of self.canvas
    self.left.update()
    self.canvas.configure(scrollregion=self.canvas.bbox('all'))

    # BOTTOM-RIGHT SECTION
    self.right = Frame(self.bottom, bg="white")
    self.right.pack(fill=BOTH, expand=1, side=RIGHT)
    Label(self.right, text="##########################").pack()
    Label(self.right, text="##########################").pack()

    self.main_window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...