Как отключить запись, когда она пуста в tkinter? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь отключить кнопку, когда поле ввода пусто, и включить, когда я что-то набираю.

это часть, где кнопка и поле ввода.

self.description = tk.StringVar()
self.entry_ds = ttk.Entry(self, width=25, 
                          textvariable=self.description)
self.entry_ds.grid(column=0, row=1, padx=13, pady=4)
self.entry_ds.focus()

self.co_button = ttk.Button(self, text='Confirm', command=self.on_press_ds)
self.co_button.grid(column=0, row=2, pady=4)

def on_press_ds(self):
    description = self.description.get()
    if description:
        self.master.listbox.insert('end', description)
    self.destroy_ds()
    self.destroy()

Я пытался использовать

if not self.description.get():
    self.co_button['state'] = 'disabled'

и смог отключить поле ввода, когда оно пустое, но мне не удалось включить его, когда я что-то набрал.

1 Ответ

1 голос
/ 07 мая 2019

Самый простой способ - добавить трассировку в связанную переменную. В пределах трассы вы можете изменить состояние кнопки в зависимости от текущего значения.

Сначала определите функцию, которая будет вызываться трассировкой:

def on_entry_trace(self, *args):
    new_state = "disabled" if self.description.get() == "" else "normal"
    self.co_button.configure(state=new_state)

Затем создайте трассировку и заставьте ее вызываться для установки начального состояния. Вы сделали бы это в той же функции, которая создает переменную.

Первый аргумент trace сообщает tkinter, когда вызывать связанную функцию. "w" говорит о необходимости вызова функции всякий раз, когда в переменную записывается (то есть: значение изменяется). Второй аргумент - это вызываемая функция.

self.description.trace("w", self.on_entry_trace)
self.description.set("")  # initialize the state

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

Для получения дополнительной информации о том, какие аргументы для функции, вызываемой trace, см. Каковы аргументы для обратных вызовов метода трассировки переменной Tkinter?

Effbot имеет достойную запись переменных трасс, включая информацию о трассах, на странице Классы переменных (BooleanVar, DoubleVar, IntVar, StringVar)

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