Правильный способ установки положения полосы прокрутки в Python Tkinter - PullRequest
0 голосов
/ 05 ноября 2018

Я делаю основной текстовый редактор и сохраняю позицию прокрутки в файле при закрытии программы. Затем при открытии программы она прочитает позицию прокрутки из файла и обновит ее, чтобы вы могли продолжить с того места, на котором остановились.

Я могу получить точную позицию из scrolledtext.yview(), который возвращает кортеж, например, с помощью (0,42, 0,75)

Но я не могу понять, как изменить положение прокрутки. Я попытался scrolledtext.vbar.set(0.42, 0.75) попытаться обновить его, но это не работает, так как в нем ничего не происходит и не выдает ошибок. Я также попробовал scrolledtext.yview(0.42, 0.75), но там написано TclError: bad option "0.42": must be moveto or scroll, так что, если кто-нибудь знает, как обновить его, это было бы очень полезно, ура.

Edit (код):

import tkinter as tk

root = tk.Tk()
Frame = frame(root)
Frame.pack()
textbox = ScrolledText(Frame)
textbox.pack()
textbox.yview()  #this is saved to file, produces tuple of e.g. (0.42, 0.75)
textbox.vbar.set(0.3, 0.7)  #this doesn't produce any errors but doesn't change the scroll position 
textbox.yview(0.3, 0.7)  #this is also something i have tried but produces the error _tkinter.TclError: bad option "0.4243827160493827": must be moveto or scroll

root.mainloop()

1 Ответ

0 голосов
/ 05 ноября 2018

Вы не можете ожидать, что сохраненный yview будет работать во всех случаях. Если файл был отредактирован, пропорции могут быть неправильными.

Кортеж, который вы получаете от yview, представляет фракцию, видимую вверху, и фракцию, видимую внизу. Вы можете позвонить yview_moveto, чтобы установить положение сверху, а затем позволить tkinter позаботиться о дроби внизу.

Например, если сохраненный вами yview - (0.42, 0.75), вам просто нужно позвонить yview_moveto('0.42'). Это приведет к тому, что представление будет настроено так, чтобы данное смещение находилось в верхней части окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...