Sid*_*oea 5 python tkinter ttk python-3.x
我在Python 3.4.1(Windows 7)上使用tkinter,我发现ttk的Entry.xview_moveto函数无法正常工作.这是一些简单的代码:
from tkinter import *
from tkinter import ttk
a = Tk()
text = StringVar(a, value='qwertyuiopasdfghjklzxcvbnm1234567890')
b = ttk.Entry(a, textvariable=text)
b.grid()
b.xview_moveto(1)
Run Code Online (Sandbox Code Playgroud)
xview_moveto函数应该将文本一直向左滚动,但事实并非如此.但是,我注意到,如果我使用
b.after(500, b.xview_moveto, 1)
Run Code Online (Sandbox Code Playgroud)
它工作得很好.为什么我必须延迟函数调用以使其正常工作?难道我做错了什么?
更新:除了fhdrsdg的解决方案,我发现该Entry.after_idle方法适用于我的程序.它似乎不适用于上述简单示例,但如果其他任何人遇到与我相同的问题,这可能是另一个更清洁的解决方案.
这个问题在tcl/Tk中也存在。
那里提出的答案是绑定到 Entry 的<Expose>事件并随后取消绑定。我尝试将其重写为 Python / tkinter:
def xview_event_handler(e):
e.widget.update_idletasks()
e.widget.xview_moveto(1)
e.widget.unbind('<Expose>')
a = Tk()
text = StringVar(a, value='qwertyuiopasdfghjklzxcvbnm1234567890')
b = ttk.Entry(a, textvariable=text)
b.grid()
b.bind('<Expose>', xview_event_handler)
Run Code Online (Sandbox Code Playgroud)
使用低于 8.5.5 的 tcl 版本时似乎update_idletasks需要。
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |