Фокусировка на следующем поле ввода после ввода числа в текущем поле ввода

Я пытаюсь выяснить, есть ли способ ввести число от 1 до 4 в поле ввода, а затем перейти к следующему полю ввода (с числом, введенным в поле; приведенный ниже код переходит к следующему вводу без ввода чего-либо )

Я создаю программу, которая будет принимать ввод данных на уровне элемента для вычисления в разных субшкалах. У меня эта часть работает в другом коде, но я бы предпочел не нажимать вкладку между каждым полем ввода текста, так как их будет много.

Основной код:

from tkinter import *

master = Tk()
root_menu = Menu(master)
master.config(menu = root_menu)

def nextentrybox(event):
    event.widget.tk_focusNext().focus()
    return('break')

Label(master, text='Q1',font=("Arial",8)).grid(row=0,column=0,sticky=E)
Q1=Entry(master, textvariable=StringVar)
Q1.grid(row=0,column=1)
Q1.bind('1',nextentrybox)
Q1.bind('2',nextentrybox)
Q1.bind('3',nextentrybox)
Q1.bind('4',nextentrybox)
Label(master, text='Q2',font=("Arial",8)).grid(row=1,column=0,sticky=E)
Q2=Entry(master, textvariable=StringVar)
Q2.grid(row=1,column=1)
Q2.bind('1',nextentrybox)
Q2.bind('2',nextentrybox)
Q2.bind('3',nextentrybox)
Q2.bind('4',nextentrybox)
### etc for rest of questions

### Scale sums, t-score lookups, and report generator to go here

file_menu = Menu(root_menu)
root_menu.add_cascade(label = "File", menu = file_menu)
file_menu.add_separator()
file_menu.add_command(label = "Quit", command = master.destroy)

mainloop()

Спасибо за любую помощь или указатели!


person B Flynn    schedule 05.02.2019    source источник
comment
Это потому, что вы привязали эти цифровые клавиши исключительно для перемещения полей. Вместо этого вам нужно удалить это условие, чтобы вы могли ввести эти числа, и вместо этого добавить условие, которое проверяет, было ли введено одно из этих чисел, прежде чем двигаться дальше. Редактировать: для ясности попробуйте написать любую БУКВУ или цифру ›4 или 0.   -  person visualnotsobasic    schedule 05.02.2019


Ответы (1)


Самое простое решение — ввести символ клавиши события, прежде чем переходить к следующему полю.

В следующем примере обратите внимание, как я добавил вызов event.widget.insert перед перемещением фокуса:

def nextentrybox(event):
    event.widget.insert("end", event.keysym)
    event.widget.tk_focusNext().focus()
    return('break')
person Bryan Oakley    schedule 05.02.2019