Scrollbar nie chce scrollować

0

Dzień dobry,

Chcę napisać program, który będzie posiadał małe okienko dające się scrollować. Jednak nie mogę poradzić sobie ze Scrollbar'em, mianowicie nie chce się zeskrolować. Może ktoś wie co należałoby poprawić?

from Tkinter import *

root = Tk()

root.minsize(width=200, height=100)
root.maxsize(width=200, height=100)

scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill=Y )

frame = Canvas(root, yscrollcommand=scrollbar.set)

v = IntVar()

l1 = Label(frame, text="Jakis tekst")
l1.grid(row=0, column=0)
rb1 = Radiobutton(frame, text="Opcja 1", variable=v, value=1)
rb1.grid(row=1, column=0)
rb2 = Radiobutton(frame, text="Opcja 2", variable=v, value=2)
rb2.grid(row=2, column=0)
l2 = Label(frame, text="Inne pytanie")
l2.grid(row=3, column=0)
rb3 = Radiobutton(frame, text="Opcja 1", variable=v, value=3)
rb3.grid(row=4, column=0)
rb4 = Radiobutton(frame, text="Opcja 2", variable=v, value=4)
rb3.grid(row=5, column=0)
l3 = Label(frame, text="Jeszcze inne pytanie")
l3.grid(row=6, column=0)
rb5 = Radiobutton(frame, text="Opcja 1", variable=v, value=5)
rb5.grid(row=7, column=0)
rb6 = Radiobutton(frame, text="Opcja 2", variable=v, value=6)
rb6.grid(row=8, column=0)

frame.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=frame.yview)

root.mainloop()
0

W sumie to proste, przespałeś pierwsze lekcje z tkinterem, chyba niezależnie gdzie się go uczyłeś, ale z każdym kolejnym kursem przestaje wierzyć w piszących je ;P.

przede wszystkim stwórz frame'a do scrollbar'a.
np.: giggle = Frame(root)
który później podajesz zamiast root'a, dla przycisków które chcesz aby były w tym frame. Frame'a też musisz pakować by ustawić go np. na górze.
Ta praktyka pozwoli ci robić choćby pasek menu w przyszłości.

Druga rzecz, że scrollbar nie działa dla elementów będących spakowanych grid'em. Musisz poprawić to na inną metodę, choćby pack. Tylko ostrzegam że masz tam inne argumenty, nie row i column (rowspan,columnspan,sticky)

Przykład działającego scrollbara:

giggle = Frame(root)
frame = Canvas(giggle, yscrollcommand=scrollbar.set)
create_giggle()
giggle.pack()

def create_giggle():
	#Tu tworzysz wszystkie przyciski itd.
	rb5 = Radiobutton(frame, text="Opcja 1", variable=v, value=5)
	rb5.pack(side=TOP, fill=NONE) #jeszcze można zdefiniować expand, ale wszystko waliłem domyślnymi wartościami

Metody dla pack:
https://www.tutorialspoint.com/python/tk_pack.htm

Inne info o modułach w tkinterze:
https://www.tutorialspoint.com/python/python_gui_programming.htm

1 użytkowników online, w tym zalogowanych: 0, gości: 1