使用ActiveTcl 8.5.18的Mac上的Tkinter Scrollbar错误

时间:2016-01-15 05:44:12

标签: tkinter scrollbar activetcl

tkinter中有一个奇怪的GUI错误,指出鼠标指针和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()

尝试单击并拖动滑块:它不起作用。如果单击并拖动下面的滑块,则可以正常工作。看起来鼠标反应滑块与可视滑块不对应。此外,拖动时滑块移动的速度与鼠标速度不对应...

这只发生在使用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)时,一切正常。

在使用python 3.4.3和Tcl 8.6.1的Linux上没有问题,在Windows上不确定。

有人知道解决方法/修复吗?使用主题小部件版本的滚动条无法解决问题。

1 个答案:

答案 0 :(得分:0)

这不是tkinter中的错误,而是Tk的Mac实现中的一个错误,从版本8.5.18和8.6.4开始。在这两个版本中,原生滚动条被删除,因为Cocoa滚动管理具有Tk的各种隐藏问题。现在使用HItheme绘制滚动条,但这会在视觉滑块和像滑块一样的区域之间引入所描述的偏移。目前没有解决此问题的方法。有关详细信息,请参见此处:

https://sourceforge.net/p/tcl/mailman/tcl-mac/?viewmonth=201703