Почему полоса прокрутки холста отключена в окне tkinter? - PullRequest
1 голос
/ 12 марта 2020

У меня проблема с приложением tkinter, которое создается с использованием python 3. Я попытался создать виджет холста, не используя контейнер с рамкой, и попытался добавить две полосы прокрутки на свой холст, одну вертикальную и другую горизонтальную. , вот код:

class drawCavnas(object):

    def __init__(self, master, width=500, height=500):
        ''' build the canvas object '''

        # class attributes
        self.master = master
        self.cWidth = width
        self.cHeight = height

        # creating the canvas object
        self.canvas = tk.Canvas(self.master, width=self.cWidth, height=self.cHeight, bg="green")
        self.canvas.grid(row=0, column=1, sticky="nwes")
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

        # creating the scrolling
        self.scroll_x = tk.Scrollbar(self.master, orient="horizontal", command=self.canvas.xview)
        self.scroll_x.grid(row=1, column=1, sticky="ew")

        self.scroll_y = tk.Scrollbar(self.master, orient="vertical", command=self.canvas.yview)
        self.scroll_y.grid(row=0, column=2, sticky="ns")

        self.canvas.configure(yscrollcommand=self.scroll_y.set, xscrollcommand=self.scroll_x.set)

, где master - это окно, созданное с помощью tk.Tk (). Проблема здесь в том, что после запуска программы и создания окна панели инструментов холста отключены, и я не могу с ними взаимодействовать. Я попытался изменить размер окна, но изменился и размер холста. Так у вас есть решение?

1 Ответ

2 голосов
/ 12 марта 2020

Почему полоса прокрутки холста отключена в окне tkinter?

Вы должны указать, какую часть большего виртуального холста вы хотите прокручивать. Вы установили область прокрутки, ограниченную объектами на холсте (self.canvas.configure(scrollregion=self.canvas.bbox("all"))). Тем не менее, вы сделали это, прежде чем рисовать что-либо на холсте, поэтому tkinter думает, что прокручивать нечего.

Если у вас есть холст 500x500, но вы хотите рисовать на более крупной области, вы можете Жесткий код области прокрутки.

Например, это позволит вам прокручиваться в области 2000x2000:

self.canvas.configure(scrollregion=(0,0,2000,2000)
...