我在 tkinter 中有一些條目。目前,我需要將游標移動到每個條目并單擊它以將其選中。我希望使用arrow keys. 我看到我們可以使用bind_class來選擇所有的 Entry 小部件;但是,我不知道如何focus()在條目中向上/向下/向左/向右移動。這是我的代碼:
import tkinter as tk
class Data:
def __init__(self):
self.x = tk.IntVar()
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.minsize(700, 700)
container = tk.Frame(self)
container.pack()
self.data = Data()
self.frames = {}
for F in (PageOne, ):
frame = F(container, self.data)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
def show_frame(self, c):
frame = self.frames[c]
frame.tkraise()
class PageOne(tk.Frame):
def __init__(self, parent, data):
super().__init__(parent)
self.data = data
self.row_list = []
for i in range(4):
self.entry_list = []
for j in range(4):
self.A = tk.Entry(self)
self.A.grid(row=i, column=j)
self.entry_list.append(self.A)
self.row_list.append(self.entry_list)
self.bind_class("Entry", "<Down>", self.next_widget)
self.bind_class("Entry", "<Up>", self.next_widget)
self.bind_class("Entry", "<Right>", self.next_widget)
self.bind_class("Entry", "<Left>", self.next_widget)
def next_widget(self, event):
event.widget.focus()
return ("break")
app = SampleApp()
app.mainloop()
uj5u.com熱心網友回復:
您可以使用tk_focusPrev()andtk_focusNext()來獲取所需Entry的 keyLeft和Right.
對于 key Upand Down,可以grid_size()用來獲取網格的列數和行數,使用grid_info()onEntry來獲取網格資訊,即row在column哪里Entry。然后確定Entry應該關注哪個:
def next_widget(self, event):
entry = event.widget
if event.keysym in ('Up', 'Down'):
cols, rows = entry.master.grid_size()
info = entry.grid_info()
if event.keysym == 'Up':
row = (info['row'] if info['row'] > 0 else rows) - 1
else:
row = (info['row'] 1) % rows
self.row_list[row][info['column']].focus()
elif event.keysym == 'Left':
entry.tk_focusPrev().focus()
elif event.keysym == 'Right':
entry.tk_focusNext().focus()
return "break"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456390.html
