@Durilka96

Как scrollbar привязать к canvas?

Создаю окно, в нем canvas, в котором динамически создаются frame, которые содержат в себе виджеты, таких виджетов может быть огромное множество, и не могу справиться с прокруткой, как подключить scrollbar чтобы это работало?
выглядит окно таким образом 61e022b4cdca0703370500.png
код создания такой:
class MyTableRow(Frame):
    def __init__(self, master, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self.widgets = []
        self.frames=[]
        for i in range(3):
            widget = Entry(self)
            widget.pack(side="left")
            self.widgets.append(widget)
        self.update_btn = Button(self, text="Добавить", command=self.update_clicked)
        self.update_btn.pack(side="right")
        self.delete_btn = Button(self, text="Удалить", command=self.delete_clicked)
        self.delete_btn.pack(side="right")


    def update_clicked(self):
        print(self.widgets[0].get())

    def delete_clicked(self):
        print("whatever")

def dinamic_form():
    global widgets
    global frames
    doth=tix.Tk()
    doth.title("Результат поиска")
    doth.geometry("300x400+250+50")
    doth.attributes('-toolwindow', True)
    canvas=Canvas(doth, borderwidth=0, background="#ffffff")
    canvas.pack(side="top")
    scroll_doth = Scrollbar(canvas, orient=VERTICAL)
    scroll_doth.pack(side="right")
    frames = []
    widgets = []
    for i in range(10):
        frame = MyTableRow(canvas, borderwidth=2, relief="groove")
        frames.append(frame)
        frame.pack(side="top", fill="x")
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
lordcodes
@lordcodes
Python Developer
Попробуйте это:
def dinamic_form():
    global widgets
    global frames
    doth=tix.Tk()
    doth.title("Результат поиска")
    doth.geometry("300x400+250+50")
    doth.attributes('-toolwindow', True)

    frame=Frame(doth, borderwidth=0, background="#ffffff")
    frame.pack(side="top")

    canvas=Canvas(frame, borderwidth=0, background="#ffffff")
    canvas.pack(side="top")
    
    scroll_doth = Scrollbar(frame, orient=VERTICAL)
    scroll_doth.pack(side="right")
    frames = []
    widgets = []
    for i in range(10):
        frame = MyTableRow(canvas, borderwidth=2, relief="groove")
        frames.append(frame)
        frame.pack(side="top", fill="x")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы