2011-07-13 18 views
6

üzerinde çalıştığım edildiğini, bir Tkinter uygulamasında sekme sırasını ayarlamak için bir yol arıyor. Şu anda varsayılan sıra, yukarıdan aşağıya doğru çalışıyor gibi görünüyor, ancak denetimler arasında geçiş yapmak için CTRL + Tab kullanılmasını gerektirir.nasıl Tkinter uygulamasında sekme sırasını ayarlamak için?

düzen ve, daha çok, CTRL + Sekme sadece Tab değiştirmek özelleştirmek için herhangi bir yolu var mı?

cevap

11

Sekme sırası sırasına dönüş varsayılan içinde widget'ları oluşturulur o yığın sırasının dayanmaktadır. tkraise (veya lift) ve lower yöntemlerini kullanarak yığınlama sırasını (ve dolayısıyla sekme sırasını) ayarlayabilirsiniz.

Bu

CTRL + Tab basın gerek kalmadan sizin için kutunun dışında çalışıyor olması gerekir. Bununla birlikte, bu sekmenin, odağı başka bir kontrole taşımak yerine metin widget'larında bir tamsayı sekmesi eklediğini unutmayın. Bu varsayılan davranış, elbette değiştirilebilir.

İşte sekme sırasını tersine çevirmek için nasıl gösteren bir örnek. Örneği çalıştırırken, ilk girişteki sekmeye basmak sizi sonuncuya götürmelidir. Tekrar sekmeyi basılması, daha sonra ilk, sabun, yerli Tk komutları raise ve lower ancak raise beri Tkinter yeniden adlandırılan gerekiyordu Python ayrılmış bir sözcüktür olduklarını, durulama

Not tekrarlamak saniyede götürür.

import Tkinter as tk 


class SampleApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 

     e1 = tk.Entry(self) 
     e2 = tk.Entry(self) 
     e3 = tk.Entry(self) 

     e1.insert(0,"1") 
     e2.insert(0,"2") 
     e3.insert(0,"3") 

     e1.pack() 
     e2.pack() 
     e3.pack() 

     # reverse the stacking order to show how 
     # it affects tab order 
     new_order = (e3, e2, e1) 
     for widget in new_order: 
      widget.lift() 


if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 

Eğer CTRL + Tab yapmak zorunda söz beri bir metin widget sekmesi anahtar değişim odağı çalışıyoruz tahmin ediyorum. Normalde bir sekme tuşu, bir tamsayı sekmesi ekler. Ne zaman odak değiştirmek istiyorsanız, sadece <Tab> olaya bağlama ekleyin.

Tkinter odağı almalısınız sonraki widget adını döndürür bir işlevi vardır. Ne yazık ki, Tkinter'in eski versiyonları için bu fonksiyon arabası. Bununla birlikte, bu konuda çalışmak kolaydır. Yukarıdaki kod için ekleyebileceğiniz birkaç yöntem:

def _focusNext(self, widget): 
     '''Return the next widget in tab order''' 
     widget = self.tk.call('tk_focusNext', widget._w) 
     if not widget: return None 
     return self.nametowidget(widget.string) 

    def OnTextTab(self, event): 
     '''Move focus to next widget''' 
     widget = event.widget 
     next = self._focusNext(widget) 
     next.focus() 
     return "break" 
İlgili konular