Полоса прокрутки не собирается должным образом в tkinter - PullRequest
0 голосов
/ 30 апреля 2019

Может кто-нибудь сказать, пожалуйста, что я делаю не так? Кажется, что полоса прокрутки не отражает область виджета, с которой она связана.

Большое спасибо.

from tkinter import *
import tkinter as tk

#panel1
root = tk.Tk()
frame1 = tk.Frame(master=root, width=900, height=800)
canvas = tk.Canvas(frame1, width=900, height= 900)
vsb = tk.Scrollbar(frame1, orient=VERTICAL)
canvas.configure(yscrollcommand=vsb.set, 
scrollregion=canvas.bbox("all"))
vsb.configure(command=canvas.yview)
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
vsb.pack(fill=Y, side=RIGHT, expand=FALSE)
# notebook.add(frame1, text="1")
frame1.pack(expand=True, fill=BOTH)
root.mainloop()

1 Ответ

0 голосов
/ 01 мая 2019

Если холст пуст, прокручивать нечего.И полоса прокрутки отражает это правильно.

Вы должны добавить что-то к Canvas, чтобы прокрутить его.

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

Вы должны использовать scrollregion= после того, как положите предметы на холст.Или вы можете использовать after() для использования scrollregion= после того, как tkinter покажет окно.

import tkinter as tk

#def resize():
#    canvas.configure(scrollregion=canvas.bbox("all"))

root = tk.Tk()

frame1 = tk.Frame(root, width=900, height=800)
frame1.pack(expand=True, fill='both')

canvas = tk.Canvas(frame1, width=900, height= 900)
canvas.pack(side='left', fill='both', expand=True)

vsb = tk.Scrollbar(frame1, orient='vertical')
vsb.pack(fill='y', side='right', expand=False)
vsb.configure(command=canvas.yview)

item_1 = tk.Frame(canvas, bg='red', width=500, height=500)
canvas.create_window(0, 0, window=item_1, anchor='nw')

item_2 = tk.Frame(canvas, bg='green', width=500, height=500)
canvas.create_window(500, 500, window=item_2, anchor='nw')

canvas.configure(yscrollcommand=vsb.set, scrollregion=canvas.bbox("all"))

#root.after(100, resize)

root.mainloop()
...