Виджет входа и состояние «нормальный» - PullRequest
0 голосов
/ 27 октября 2019

Мне пришлось использовать виджет Entry в состоянии «только для чтения», затем я хотел изменить текст с помощью метода вставки: для этого я понимаю, что необходимо перевести виджет в состояние «нормальный»,но я получаю сообщение об ошибке: это "нормально"?

Например,

    entry = ttk.Entry(root,width=30)
    entry.insert(0,"Please enter your name")
    entry.state(['readonly'])
    entry.state(['normal'])

В результате выдает:

Файл "/ Library / Frameworks / Python.framework / Versions / 3.7 / lib / python3.7 / tkinter / ttk.py ", строка 595, в состоянии return self.tk.splitlist (str (self.tk.call (self._w," state ", Statespec))) _tkinter.TclError: Неверное имя состояния, нормальное

1 Ответ

1 голос
/ 27 октября 2019

Смущает, что виджеты ttk имеют два разных понятия «состояние». Одним из них является параметр конфигурации с именем state, а другим - метод с именем state. Параметр конфигурации является сокращением для изменения возможности редактирования виджета. Метод используется для получения и установки нескольких внутренних состояний, используемых для стилизации.

Эти два способа задания состояния принимают разные значения. Состояние «только для чтения» - это одно состояние, которое допустимо для обоих, но «нормальное» действительно только для параметра конфигурации.

Чтобы использовать метод state , вы передаете stateSpec , представляющий собой список из одного или нескольких состояний или состояний с отрицанием. Например, чтобы переключаться между режимами «только чтение» и «не только чтение», вы должны сделать это следующим образом:

entry.state(["readonly"])
entry.state(["!readonly"])

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

Более простой способ настроить, является ли виджет редактируемым или нет, с помощью опции конфигурации state. Это должно быть всегда одно из строковых значений «нормальный», «отключенный» или «только для чтения».

entry.configure(state="readonly")
entry.configure(state="normal")

Допустимые значения для параметра конфигурации довольно понятны. Значения для создания stateSpec с помощью метода state следующие:

  • active - курсор мыши находится над виджетом и нажимаеткнопка мыши вызовет какое-то действие. (он же «prelight» (Gnome), «горячий» (Windows), «зависание»).
  • отключен - виджет отключен под управлением программы (он же «недоступен», «неактивен»)).
  • фокус - Виджет имеет фокус клавиатуры.
  • нажат - Виджет нажимается (он же «вооружен» в мотиве).
  • выбран - «Вкл.», «Истина» или «Ток» для таких вещей, как кнопки-флажки и радиокнопки.
  • фон - Windows и Mac имеютпонятие «активного» или переднего окна. Фоновое состояние устанавливается для виджетов в фоновом окне и очищается для виджетов в окне переднего плана.
  • readonly - Виджет не должен разрешать изменение пользователем.
  • alternate - Альтернативный формат отображения для виджета. Например, используется для кнопок-переключателей и радиокнопок в состоянии «tristate» или «mixed», а также для кнопок с активным параметром -default.
  • invalid - значение виджета недействительно. (Потенциальное использование: масштабирование значения виджета за пределами, входное значение виджета не прошло проверку.)
  • hover - курсор мыши находится внутри виджета. Это похоже на активное состояние;он используется в некоторых темах для виджетов, которые обеспечивают отличную визуальную обратную связь для активного виджета в дополнение к активному элементу в виджете.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...