Я добавил некоторые функциональные возможности полосы прокрутки к своему Tkinter GUI примерно так:
self.canvas = tk.Canvas(self.baseframe)
self.scrollbar = tk.Scrollbar(self.baseframe, orient="vertical", command=self.canvas.yview)
self.scrollable = tk.Frame(self.canvas)
self.scrollable.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
self.canvas.create_window((0, 0), window=self.scrollable, anchor="n")
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.canvas.bind_all("<MouseWheel>", self._mousescroll)
Я определил _mousecroll()
как
def _mousescroll(self, event):
"""mouse wheel scroll callback"""
# Divide the event.delta by some value to effect the scrolling speed
self.canvas.yview_scroll(int(-1*(event.delta/120)), "units")
, что прекрасно работает.
Затем я добавляю несколько tkLabelFrame
виджетов в область прокрутки (которые сами содержат виджеты, отображающие материал - не относится к этому вопросу). Вся функциональность прокрутки работает очень хорошо.
В другой части моего GUI я бы хотел, чтобы пользователь мог "прыгать" к определенной c точке в области прокрутки на кнопке. нажмите кнопку. По сути автоматически прокручивает область прокрутки до этой точки. Это возможно? У меня есть полный контроль над кодом GUI, так что я могу добавлять метки в список tkLabelFrames, сохранять их в каком-то списке / словаре, чтобы их можно было легко найти ... что-то вроде этого?
Примечание. Число tkLabelFrames
, добавляемых в область прокрутки, равно Dynami c, поэтому какой-то абсолютный «переход на такое количество пикселей», вероятно, не будет работать. Я надеялся, что там может быть какой-то вид «прокрутки до виджета с этой функциональностью label / attribute et c ..». Любая помощь приветствуется. Спасибо.