2011-07-13 46 views
6

Tôi đã tìm kiếm một cách để đặt thứ tự tab trong một ứng dụng tkinter, mà tôi đã làm việc. Hiện tại, đơn hàng mặc định dường như đang hoạt động từ trên xuống nhưng yêu cầu phải sử dụng CTRL + Tab để chuyển qua các điều khiển.Làm cách nào để đặt thứ tự tab trong ứng dụng tkinter?

Có cách nào để tùy chỉnh đơn hàng và, nhiều hơn thế, thay đổi CTRL + Tab chỉ với Tab?

Trả lời

11

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à raiselower, 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" 
Các vấn đề liên quan