В tkinter есть странная ошибка графического интерфейса при взаимодействии между указателем мыши и tkinter.Scrollbar
. Ползунок полосы прокрутки находится не в месте, показанном графически, и не движется с той же скоростью, что и указатель мыши. Это очень затрудняет использование. Вот пример кода, заимствованный из http://effbot.org/tkinterbook/scrollbar.htm. :
#!/usr/bin/env python3 # python 3.4.3 using ActiveTcl 8.5.18
#!/usr/bin/env python # python 2.7.10 using ActiveTcl 8.5.18
#!/usr/bin/python # os-x-native python 2.7.5 using os-x-native Tcl 8.5.9 [WORKS]
# Example from http://effbot.org/tkinterbook/scrollbar.htm
try:
# Python2
import Tkinter as tk
except ImportError:
# Python3
import tkinter as tk
import tkinter.ttk as ttk
import sys
master = tk.Tk()
# print version info:
sys.stdout.write("Python: %s.%s.%s\nTcl: %s\n" % (sys.version_info[0], sys.version_info[1], sys.version_info[2], tk.Tcl().eval("info patchlevel")))
# scrollbar = ttk.Scrollbar(master)
scrollbar = tk.Scrollbar(master)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
listbox = tk.Listbox(master, yscrollcommand=scrollbar.set)
for i in range(1000):
listbox.insert(tk.END, str(i))
listbox.pack(side=tk.LEFT, fill=tk.BOTH)
scrollbar.config(command=listbox.yview)
tk.mainloop()
Попробуйте щелкнуть и перетащить ползунок: он не работает. Если щелкнуть и перетащить ниже ползунка, все заработает. Похоже, что ползунок, реагирующий на мышь, не соответствует визуальному ползунку. Кроме того, скорость, с которой движется ползунок при перетаскивании, не соответствует скорости мыши...
Это происходит только на Mac с использованием ActiveTcl 8.5.18 (рекомендуемая версия на Mac для Python >= 2.7.10, включая Python 3). Все работает нормально при использовании osx-native python 2.7.5 и osx-native Tcl 8.5.9 (os x 10.9.5).
Проблема отсутствует в linux с python 3.4.3 и Tcl 8.6.1, в windows не уверен.
Кто-нибудь знает обходной путь/исправление? Использование версии Scrollbar с тематическим виджетом не решает проблему.