Переключатель состояния виджета Python tkinter Entry с помощью переключателей - PullRequest
5 голосов
/ 07 июня 2011

простой вопрос (не такой простой для новичка tkinter, такого как я): я создаю графический интерфейс и хочу, чтобы две переключатели управляли состоянием (включено или отключено) виджета Entry, в который пользователь будет входить входные данные. Когда нажата первая радиокнопка, я хочу, чтобы вход был отключен; когда нажата вторая радиокнопка, я хочу, чтобы вход был отключен.

Вот мой код:

from Tkinter import *

root = Tk()
frame = Frame(root)

#callbacks
def enableEntry():
    entry.configure(state=ENABLED)
    entry.update()

def disableEntry():
    entry.configure(state=DISABLED)
    entry.update()

#GUI widgets
entry = Entry(frame, width=80)
entry.pack(side='right')

var = StringVar()
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry)
disableEntryRadioButton.pack(anchor=W)
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry)
enableEntryRadioButton.pack(anchor=W)

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

Где я не прав?

1 Ответ

6 голосов
/ 07 июня 2011

В вашей программе есть несколько проблем, но общая структура в порядке.

  1. Вы не звоните root.mainloop(). Это необходимо для того, чтобы цикл обработки событий обслуживал такие события, как нажатия кнопок и т. Д.
  2. вы используете ENABLED и DISABLED, но нигде не определяете и не импортируете их. Лично я предпочитаю использовать строковые значения "normal" и "disabled".
  3. вы не упаковываете свой основной frame виджет

Когда я исправляю эти три вещи, ваш код работает нормально. Вот рабочий код:

from Tkinter import *

root = Tk()
frame = Frame(root)
frame.pack()

#callbacks
def enableEntry():
    entry.configure(state="normal")
    entry.update()

def disableEntry():
    entry.configure(state="disabled")
    entry.update()

#GUI widgets
entry = Entry(frame, width=80)
entry.pack(side='right')

var = StringVar()
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry)
disableEntryRadioButton.pack(anchor=W)
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry)
enableEntryRadioButton.pack(anchor=W)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...