Scrollbar nie chce scrollować

Scrollbar nie chce scrollować
kiyo
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: JVM
  • Postów: 179
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ć?

Kopiuj
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()
Guaz
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Częstochowa
  • Postów: 221
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:

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.