2015-07-24 2 views
2

Я работаю с Python v3.4 и с помощью библиотеки Tkinter для тренировки моего графического интерфейса.проверить, какая запись сфокусирована (Python)

Я включил экранную клавиатуру в моем приложении python. Проблема состоит в следующем:

Они три записи:

username = Entry(root,font="Verdana 22") 

password = Entry(root, font="Verdana 22") 

courrierEntry = Entry(root, font="Verdana 22") 

Ниже клавиатуры

def select(value): 
     if value == "BACK": 
      entry2 = len(username.get()[:-1]) 

     username.delete(entry2, END) 

    elif value == " Space ": 
      username.insert(END, ' ') 

    elif value == " Tab ": 
      username.insert(END, ' ') 

    else: 
      username.insert(END, value) 

buttons = [ 
    'q','w','e','r','t','y','u','l','o','p','BACK','7','8','9','-', 
    'a','s','d','f','g','h','j','k','l','[',']','4','5','6','+', 
    'z', 'x','c','v','b','n','m',',','.','?','1','2','3','/','HELP', 
    ] 

varRow = 2 
varColumn = 0 

for button in buttons: 

    command = lambda x = button: select(x) 
    keyboardButton = Button(keyboardFrame, text = button, width = 8, bg="#795548", fg="#ffffff", 
      activebackground="#D7CCC8",activeforeground="#000000",relief = "raised", padx=0,font="Verdana 11 bold", 
      pady=8, bd=8, command = command) 
    keyboardButton.grid(row = varRow, column = varColumn) 
    varColumn += 1 
    if varColumn > 14 and varRow == 2: 
     varColumn = 0 
     varRow += 1 
    if varColumn > 14 and varRow == 3: 
     varColumn = 0 
     varRow +=1 

Как вы можете иметь уведомление в клавиатуре, это относится только к username entry, и следовательно, даже если он не сфокусирован на username entry всякий раз, когда нажимается кнопка, реагирует только username entry.

Я хотел бы, чтобы установить какое-то утверждение if, проблема в том, что я не знаком с проверкой того, что запись сфокусирована/выбрана. Он должен быть выбран текущей записью, а не именем. Поэтому, когда я выбираю, я могу напечатать.

Обновление:

------ КЛАВИАТУРА ----------

#checking to see whcih input entry is currently focused 
inputFocus = None 

def currentEntry(userEntry): 
    global inputFocus 
    inputFocus = userEntry 

username.bind("<FocusIn>", lambda: currentEntry(username)) 
password.bind("<FocusIn>", lambda: currentEntry(password)) 
courrierEntry.bind("<FocusIn>", lambda: currentEntry(courrierEntry)) 


def select(value): 
    if value == "BACK": 
     entry2 = len(inputFocus.get()[:-1]) 

     inputFocus.delete(entry2, END) 

    elif value == " Space ": 
      inputFocus.insert(END, ' ') 

    elif value == " Tab ": 
      inputFocus.insert(END, ' ') 

    else: 
      inputFocus.insert(END, value) 

ответ

3

Вы можете позвонить keyboardFrame.focus_get(), чтобы получить объект окна, который имеет фокус.

+0

спасибо и как бы отрегулировать функцию select (value) – John

+1

@ user3907211: 'widget = keyboardFrame.focus_get(); widget.insert (...) '. –

+0

спасибо за разъяснение. Я имел в виду, в частности, выражение if из функции select – John

0

Что вы хотите запомнить, это последняя запись с фокусом. Потому что нажатие кнопки дает фокус кнопке.

hasFocus = None 

def currentEntry(myEntry): 
    global hasFocus 
    hasFocus = myEntry 

username.bind("<FocusIn>", lambda myEvent: currentEntry(username)) # do the same for the other entries 

Затем используйте hasFocus в избранном.

NB: вы, вероятно, захотите добавить if inputFocus != None: в выбрать, потому что в начале нет выбранной записи.

+0

спасибо. Я просто получаю одну небольшую ошибку: Unresolved reference 'FocusIn' – John

+1

Это немного перебор, так как tkinter уже помнит, какой виджет имеет фокус. Там действительно не нужно отслеживать это самостоятельно. –

+0

@ user3907211: извините, забыли цитаты. –

Смежные вопросы