У меня проблема с использованием горизонтального tk.Scrollbar
в виджете tk.Text
. Он отображается слишком маленьким для области, которую предполагается прокручивать - если я перемещаю ее влево, она достигает конца прокручиваемой области до того, как небольшая полоса коснется правой стороны, как и следовало ожидать. Кроме того, если я позволю ему go, он визуально вернется в исходное положение в начале, однако состояние прокрутки не изменится.
Что странно, так это то, что я использую точно такой же синтаксис для вертикального полоса прокрутки, и она работает безупречно.
Я включил, как я (ab), используя tk.Text
-виджет, который tk.Label
-виджет встроен в tk.Text
-виджет с помощью метода window_create
.
Скриншоты:
Код:
import tkinter as tk
class app(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.frame = tk.Frame(self)
self.frame.grid(row=0, column=0, sticky='NW')
# widget definitions
cellYScrollbar = tk.Scrollbar(self, orient="vertical")
cellXScrollbar = tk.Scrollbar(self, orient="horizontal")
full_width = 30
self.cell = tk.Text(
self, yscrollcommand=cellYScrollbar.set, xscrollcommand=cellXScrollbar.set,
width=full_width, height=full_width / 2, wrap="none",
cursor="arrow"
)
cellYScrollbar.config(command=self.cell.yview)
cellXScrollbar.config(command=self.cell.xview)
# widget gridding
self.cell.grid(row=0, column=0, sticky='NW', padx=[5, 0], pady=[5, 0])
cellXScrollbar.grid(row=1, column=0, columnspan=2, sticky='NEW', padx=[5, 0], pady=[0, 5])
cellYScrollbar.grid(row=0, column=1, sticky='NSW', padx=[0, 5], pady=[5, 0])
tiles = []
for i in range(0, 9):
for j in range(0, 9):
test = tk.Label(self.cell, text='TEST'+str(i)+str(j), width=7, height=3)
tiles.append(test)
self.cell.window_create("end", window=test, padx=1, pady=1)
self.cell.insert("end", "\n")
for tile in tiles:
tile.bind("<MouseWheel>", lambda event: self.cell.yview_scroll(int(-1 * (event.delta / 120)), "units"))
self.cell.config(state='disabled')
root = app()
root.mainloop()
РЕДАКТИРОВАТЬ: исправлен код, .set
отсутствовал в xscrollcommand=cellXScrollbar.set
, спасибо acw1668!