2012-06-30 13 views
7

mam prostą aplikację Python + tkinter który wyświetla listę z 10 elementów:Jak ustawić fokus na widżet Tkintera?

import Tkinter, ttk 
list = ttk.Treeview(Tkinter.Tk()) 
list.pack(fill = Tkinter.BOTH, expand = 1) 
items = [ list.insert('', 'end', text = str(i)) for i in range(10) ] 
list.selection_set(items[ 0 ]) 
list.focus_set() # This is not working - list has no focus :(
Tkinter.mainloop() 

Czy jest możliwe aby zmodyfikować go tak po uruchomieniu aplikacji, lista będzie mieć ostrość i mogę przenieść wybrane przez górę iw dół ? Po uruchomieniu aplikacji okno aplikacji jest aktywne, ale nie mogę przesuwać zaznaczenia za pomocą strzałek, dopóki nie kliknę listy myszką :(Próbowałem różnych kombinacji focus_set() i focus_force(), ale to nie działa

Sprawdzono w Pythonie 2.7 na Windows 7, OSX 10.7 i Ubuntu 12.04

UPDATE

Jeśli "Drzewko" zostanie zmieniony na inny widget, na przykład do "Button", nacisk działa. Więc to wydaje się, że mogę ustawić ostrość dla Widok drzewa w jakiś sposób niepoprawnie.

+1

Próbowałem dostać tę pracę, i ja też nie jestem pewien, czy potrafisz; wygląda na to, że funkcja jest zepsuta. Jest jeszcze kilka innych postów i nikt nigdy nie znalazł rozwiązania. – TankorSmash

+0

@TankorSmash Nie sądzę, że funkcja jest zepsuta: Tk/Tkinter ma kilkadziesiąt lat, więc zdecydowanie robię coś złego :) – grigoryvp

+0

Heh, pomyślisz, co? Podklasowałem widok drzewa, na '__init__', nazwałem' focus_set', a następnie "focus_get" zaraz po, i zwrócił Brak, sugerując, że nic się nie zmieniło, nawet z 'takefocus' ustawionym na' 1'. - Nawet edytowałem kod Tkintera, zaraz po wywołaniu 'self.tk.call ('focus', self.w)', sprawdzam, czy widżet 'focus_has' i nadal jest' None'. Możliwe, że mainloop musi coś ustawić, żeby zmiana ostrości się zmieniła, ale wątpię w to. – TankorSmash

Odpowiedz

8

znalazł rozwiązanie w końcu - Wydaje się, że Treeview widget należy ustawić ostrość dwa razy: najpierw dla samego widgetu, a po drugie za przedmiot:

list.selection_set(items[ 0 ]) 
list.focus_set() 
list.focus(items[ 0 ]) # this fixes a problem. 
Powiązane problemy