2015-03-29 14 views
5

Python 3.4.1'de (Windows 7) tkinter ile çalışıyorum ve ttk'in Entry.xview_moveto işlevinin düzgün çalışmadığını buluyorum.Neden tkinter'in Entry.xview_moveto başarısız?

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) 

xview_moveto fonksiyonu sola metni tüm yönlü kaydırma, ama öyle değil: İşte bazı basit bir koddur. Ancak, ben

kullanırsanız, gayet iyi çalıştığını fark ettim. Neden düzgün çalışması için fonksiyon çağrısını geciktirmem gerekiyor? Yanlış bir şey mi yapıyorum?

Güncelleme: fhdrsdg çözümüyle ek olarak, ben Entry.after_idle yöntem benim program için çalıştığını bulduk. Yukarıdaki basit örnek için işe yaramıyor gibi görünmüyor, ama başkası benim gibi aynı sorunu yaşıyorsa, bu daha temiz, daha temiz bir çözüm olabilir.

cevap

2

Bu sorun, tcl/Tk da bulunmaktadır.
Buradaki yanıt, Giriş'in <Expose> etkinliğine bağlanmak ve sonradan bunu kaldırmak için önerilir. Ben Python/Tkinter o yeniden yazmak için denedim:

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) 

update_idletaskswhen using a tcl version below 8.5.5 gerekli gibi görünüyor.

+0

, olay işleyicisinde 'update_idletasks' çağırmanız gerekmez. İşleyicinin çağrılmasının tek yolu, "güncelleştirme" nin çalıştırılmasıdır. –

+0

Düşündüğüm buydu, ama o çizgiyi aldığımda manzara benim için hareket etmiyor. – fhdrsdg

+0

İlginç. Cevap için teşekkürler. –

İlgili konular