У меня есть код, который получает ключевые входы и показывает его в поле ввода в окне верхнего уровня главного окна.В главном окне у меня есть окно со списком, и я хочу получить ввод ключа, который отображается в поле ввода для зачисления при нажатии кнопки подтверждения на верхнем уровне.
Я пробовал несколько способов получить evt.keysym
длямой список, но все не удалось.
class EntryBox(tk.Entry):
def __init__(self, master, cnf = {}, **kw):
kw = tk._cnfmerge((kw, cnf))
kw['justify'] = kw.get('justify', 'center')
kw['width'] = 15
kw['state'] = 'readonly'
super(EntryBox, self).__init__(master=master, **kw)
self.unbind_class('Entry', '<BackSpace>')
self.unbind_class('Entry', '<Key>')
self.bind_class(self, '<Key>', self._display)
def _display(self, evt):
self['state'] = 'normal'
self.delete('0', 'end')
self.insert('0', str(evt.keysym))
self['state'] = 'readonly'
class Keyboard:
def __init__(self):
self.kb = tk.Toplevel()
kb_frame = ttk.Frame(self.kb)
kb_frame.grid(column=0, row=1, pady=(7, 19))
ttk.Label(kb_frame, text='Enter Key').grid(column=0, row=0, pady=4)
entry = EntryBox(kb_frame)
entry.grid(column=0, row=1)
# Confirm button
self.co_button = ttk.Button(self.kb, text='Confirm')
self.co_button.grid(column=0, row=2)
class Main:
def __init__(self):
self.win = tk.Tk()
# listbox
lb_frame = tk.Frame(self.win)
lb_frame.grid(column=0, row=0)
scrollbar = tk.Scrollbar(lb_frame, orient='vertical')
scrollbar.grid(column=1, row=0, sticky='NS', pady=(12, 4))
listbox = tk.Listbox(lb_frame, selectmode='extended', width=25,
height=16,
yscrollcommand=scrollbar.set, activestyle='none')
listbox.grid(column=0, row=0, sticky='NSEW', padx=(6, 0), pady=(12, 4))
scrollbar.config(command=listbox.yview)
# button to open toplevel
bt_frame = ttk.Frame(self.win)
bt_frame.grid(column=2, row=0, rowspan=2)
self.kb_button = ttk.Button(bt_frame, text='KeyBoard', command=KeyBoard)
self.kb_button.grid(column=0, row=0)
main = Main()
main.win.mainloop()