Tkinter ma trzy menedżerów geometrii: pack, grid i place.
Opakowanie i siatka są zwykle zalecane w miejscu.
Można użyć grid manager'swiersz i kolumnę opcji
aby umieścić Scrollbar obok Tekst widget.
ustawić scrollBar widgetu komenda opcję yview metoda tekstu.
scrollb = tki.Scrollbar(..., command=txt.yview)
Ustaw yscrollcommand opcję Text widgetu do przewijania na ustawić metody.
txt['yscrollcommand'] = scrollb.set
Oto przykład praca:
import Tkinter as tki # Tkinter -> tkinter in Python3
class App(object):
def __init__(self):
self.root = tki.Tk()
# create a Frame for the Text and Scrollbar
txt_frm = tki.Frame(self.root, width=600, height=600)
txt_frm.pack(fill="both", expand=True)
# ensure a consistent GUI size
txt_frm.grid_propagate(False)
# implement stretchability
txt_frm.grid_rowconfigure(0, weight=1)
txt_frm.grid_columnconfigure(0, weight=1)
# create a Text widget
self.txt = tki.Text(txt_frm, borderwidth=3, relief="sunken")
self.txt.config(font=("consolas", 12), undo=True, wrap='word')
self.txt.grid(row=0, column=0, sticky="nsew", padx=2, pady=2)
# create a Scrollbar and associate it with txt
scrollb = tki.Scrollbar(txt_frm, command=self.txt.yview)
scrollb.grid(row=0, column=1, sticky='nsew')
self.txt['yscrollcommand'] = scrollb.set
app = App()
app.root.mainloop()
Część, która zajmie się swoją Scrollbar jest małe jest sticky='nsew'
,
którym można przeczytać o → here lub here.
Coś, co będzie pomocne, aby dowiedzieć się, w tej chwili jest to, że różne Tkinter widżety mogą używać różnych menedżerów geometrii ramach tego samego programu dopóki oni nie mają tego samego rodzica.
Warto również wspomnieć, że istnieje moduł ScrolledText (przemianowany tkinter.scrolledtext w Python3). Zawiera klasę o nazwie ScrolledText, która jest widgetem złożonym (Tekst: & Pasek przewijania).
# Python 2.7
import Tkinter as tki
from ScrolledText import ScrolledText
class App(object):
def __init__(self):
self.root = tki.Tk()
# create a Text widget with a Scrollbar attached
self.txt = ScrolledText(self.root, undo=True)
self.txt['font'] = ('consolas', '12')
self.txt.pack(expand=True, fill='both')
app = App()
app.root.mainloop()
Dzięki, bardzo mi to pomogło. Bardzo to doceniam. – jwebster
Zmieniłbym "zwykle polecany ponad miejsce" na "* zawsze * zalecane ponad miejscem". miejsce jest użyteczne, ale tylko w rzadkich sytuacjach. –
@honestabe Jak uzyskać linijki między różnymi sekcjami odpowiedzi? – xxmbabanexx