为何特定Tk版本中滚动条在全屏模式下出现异常?
Tkinter Canvas滚动条在Mac全屏模式下的异常问题
Stack Overflow及网络上关于Tkinter Scrollbar与Canvas的问题多聚焦基础配置,导致这类罕见滚动条问题难以检索。我为应用构建了一个接近可用的2D滚动画布,但遇到了一个少见的异常问题(可能特定于Mac或部分Tk版本)。以下是可复现问题的简化代码(兼容Python2和3),未包含maxsize/minsize、<Configure>事件绑定及主窗口的其他特殊设置:
try: import tkinter except ImportError: import Tkinter as tkinter t = tkinter.Tk() # Force no highlightthickness so borders are not cut off canvas = tkinter.Canvas(t, width=500, height=500, highlightthickness=0) xbar = tkinter.Scrollbar(t, orient='horizontal', command=canvas.xview, width=10) ybar = tkinter.Scrollbar(t, orient='vertical', command=canvas.yview, width=10) canvas.config(xscrollcommand=xbar.set, yscrollcommand=ybar.set) # This could be in the constructor but this is just to highlight it canvas.config(scrollregion=(0, 0, 1000, 1000)) canvas.grid(row=0, column=0) ybar.grid(row=0, column=1, sticky='ns') xbar.grid(row=1, column=0, sticky='ew') # Draw test pattern to make sure the scrolling works, section can be removed canvas.config(bg='#44a') for y in range(0, 1000, 50): for x in range(0, 1000, 50): canvas.create_oval(x, y, x + 20, y + 20, fill='#e66' * (x + y > 1000)) t.mainloop()
不同Tk版本下的表现:
- Mac内置Tcl/Tk 8.5:滚动条在悬停和拖动时会变暗(符合预期,但奇怪的是不会立即恢复浅灰色),全屏模式下两个滚动条均正常工作(可通过点击绿色窗口按钮或应用自定义菜单的「视图→进入全屏」选项进入全屏)。
- Python3.6.4绑定的新版Tcl/Tk 8.5:滚动条不会变暗,窗口模式下两者均正常,但全屏模式下仅Y滚动条可用,X滚动条会停留在窗口模式时的位置。
我已尝试过Scrollbar的takefocus=0配置、不使用mainloop()、调整窗口更新频率等方法,均未解决问题。根据文档和指南,我的配置似乎无误,希望得到跨平台、兼容不同Python和Tk版本的可靠解决方案,若不行,临时修复也可。另外,我因特定原因仍在使用Tk8.5,不过计划测试新版捆绑的Tk8.6是否能解决该问题。
内容的提问来源于stack exchange,提问作者hexagon
相关产品推荐
相关产品推荐

