Jest to bardzo łatwe do zrobienia z Tkinter.
Jest kilka rzeczy, które muszą się przydarzyć, aby to zadziałało. Po pierwsze, należy się upewnić, że standardowe zachowanie nie ma miejsca. Oznacza to, że nie chcesz, aby karta wstawiała kartę i przenosiła fokus do następnego widżetu. Domyślnie zdarzenia są przetwarzane przez określony widget przed miejscem, w którym występuje standardowe zachowanie (zazwyczaj w powiązaniach klas). Tk ma prosty wbudowany mechanizm zatrzymujący zdarzenia od dalszego przetwarzania.
Po drugie, musisz się upewnić, że wysyłasz fokus do odpowiedniego widżetu. Istnieje wbudowana obsługa określenia, jaki jest następny widget.
Na przykład:
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
Ważne punkty o ten kod:
- Sposób
tk_focusNext()
zwraca następny widget w hierarchii klawiatura przemierzania.
- metoda ustawiania ostrości na ten widget
- powracający
"break"
ma kluczowe znaczenie, ponieważ zapobiega wiązaniu klasy podczas strzelania. To powiązanie klasy wstawia znak tabulatora, którego nie chcesz.
Jeśli chcesz to zachowanie dla wszystkich widżetów tekstowych w aplikacji można wykorzystać metodę bind_class()
zamiast bind()
aby ten wiążący wpływ na wszystkie widgety tekstowe.
Możesz również ustawić ostrość dla konkretnego widgetu, ale zalecam trzymanie się domyślnej kolejności, a następnie upewnij się, że kolejność przejścia jest prawidłowa.
Ten zwrot ("break") napiwek właśnie uratował mój dzień, dzięki Bryan! – Symon
Miałem najczęściej niepowiązanych pytanie o tym, jak wykonać kilka dodatkowych kroków w odpowiedzi na, ** bez ** faktycznie zatrzymanie od wykonywania domyślnego zachowania. Ta odpowiedź doskonale to opisała. Dzięki! –
JDM