полоса прокрутки в холсте верхнего уровня - PullRequest
0 голосов
/ 29 декабря 2018

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

Я создал фрейм в tk (root), а один виджет во фрейме создает окно верхнего уровня, в котором есть несколько кнопок в фрейме. Количество кнопок зависит от списка,Эта рамка (в которой есть кнопки) существует на холсте.Моя проблема в том, что после установки виджета прокрутки холст не двигается

from tkinter import *
root = Tk()
root.geometry("500x200")
my_app= Frame(root)
my_app.pack()
my_window = Toplevel(my_app, bg='brown')
my_window.geometry("500x200+300+500")

top_window = Frame(my_window, bd=2, relief=SUNKEN)
top_window.grid_columnconfigure(0, weight=1)

yscrollbar = Scrollbar(top_window)
yscrollbar.grid(row=0, column=1, sticky=N+S)

canvas = Canvas(top_window, bd=0, yscrollcommand=yscrollbar.set)
canvas.config(scrollregion=(0, 0, 500, 1000))
canvas.grid(row=0, column=0, sticky=N+S+E+W)

yscrollbar.config( command = canvas.yview)
top_window.pack()
my_f = Frame(canvas)
def ins_ind(m):
    print(m)

results = 
["one","two","three","four","five","six","seven","eight","nine","ten"]
ins_list=[]

for ind, result in enumerate(results):
    ins=str(result)
    ins_list.append(ind)
    ins_list[ind] = Button(my_f, text = ins, font='Times 12 bold', 
        bg='sandy brown',anchor=E, fg="black", command = lambda m=ins: 
    ins_ind(m) )
    ins_list[ind].pack()
my_f.pack()
root.mainloop()

Полоса прокрутки не перемещается

1 Ответ

0 голосов
/ 30 декабря 2018

Чтобы кнопки двигались при прокрутке холста, вы должны поместить кнопки на холст.

Ваш код ставит кнопки на рамку my_f.Чтобы разместить кнопки на холсте, вы должны использовать: canvas.create_window(x, y, window=button).

...