Thứ tự tab dựa trên thứ tự xếp chồng, thứ tự mặc định theo thứ tự mà tiện ích con được tạo. Bạn có thể điều chỉnh thứ tự xếp chồng (và do đó theo thứ tự tab) bằng các phương pháp tkraise
(hoặc lift
) và lower
.
Điều này sẽ hoạt động ngoài hộp cho bạn mà không cần nhấn CTRL + Tab. Tuy nhiên, hãy lưu ý rằng tab đó chèn một tab chữ trong các tiện ích văn bản thay vì di chuyển tiêu điểm đến một điều khiển khác. Hành vi mặc định đó có thể được thay đổi tất nhiên.
Dưới đây là ví dụ cho thấy cách đảo ngược thứ tự tab. Khi chạy ví dụ, nhấn tab trong mục nhập đầu tiên sẽ đưa bạn đến mục cuối cùng. tab nhấn một lần nữa sẽ đưa bạn đến giây, sau đó là người đầu tiên, thoa, rửa sạch, lặp lại
Lưu ý rằng Tk
lệnh mẹ đẻ là raise
và lower
, nhưng kể từ khi raise
là một từ dành riêng trong Python nó đã được đổi tên trong Tkinter.
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()
Kể từ khi bạn đề cập đến bạn phải làm CTRL +Tab, tôi đoán bạn đang cố gắng để đặt tab chìa khóa thay đổi trọng tâm từ một widget văn bản. Thông thường, một phím tab sẽ chèn một tab chữ. Nếu bạn muốn thay đổi tiêu điểm, chỉ cần thêm một ràng buộc vào sự kiện <Tab>
.
Tkinter có chức năng sẽ trả về tên của tiện ích tiếp theo sẽ được lấy tiêu điểm. Thật không may, đối với các phiên bản cũ của Tkinter có chức năng là lỗi. Tuy nhiên, thật dễ dàng để giải quyết vấn đề đó. Dưới đây là một vài phương pháp bạn có thể thêm vào mã ở trên:
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"