Установите значение по умолчанию для ttk Combobox

Я использую Python 3.2.1 в Arch Linux x86_64. Это действительно сводит меня с ума: я просто хочу иметь значение по умолчанию, предварительно выбранное значение для ttk.Combobox как только я его ttk.Combobox . Это мой код:

 from tkinter import Tk, StringVar, ttk root = Tk() def combo(parent): value = StringVar() box = ttk.Combobox(parent, textvariable=value, state='readonly') box['values'] = ('A', 'B', 'C') box.current(0) box.grid(column=0, row=0) combo(root) root.mainloop() 

Который рисует пустой Combobox . Что смешно, что если я не использую функцию, она отлично работает:

 from tkinter import Tk, StringVar, ttk root = Tk() value = StringVar() box = ttk.Combobox(root, textvariable=value, state='readonly') box['values'] = ('A', 'B', 'C') box.current(0) box.grid(column=0, row=0) root.mainloop() 

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

2 Solutions collect form web for “Установите значение по умолчанию для ttk Combobox”

Проблема в том, что экземпляр StringVar получает сбор мусора. Это потому, что это локальная переменная из-за того, как вы написали свой код.

Одним из решений является использование класса, чтобы ваш StringVar сохранялся:

 from tkinter import Tk, StringVar, ttk class Application: def __init__(self, parent): self.parent = parent self.combo() def combo(self): self.box_value = StringVar() self.box = ttk.Combobox(self.parent, textvariable=self.box_value, state='readonly') self.box['values'] = ('A', 'B', 'C') self.box.current(0) self.box.grid(column=0, row=0) if __name__ == '__main__': root = Tk() app = Application(root) root.mainloop() для from tkinter import Tk, StringVar, ttk class Application: def __init__(self, parent): self.parent = parent self.combo() def combo(self): self.box_value = StringVar() self.box = ttk.Combobox(self.parent, textvariable=self.box_value, state='readonly') self.box['values'] = ('A', 'B', 'C') self.box.current(0) self.box.grid(column=0, row=0) if __name__ == '__main__': root = Tk() app = Application(root) root.mainloop() 

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

  • Как скрыть индикаторы ttk Treeitem в графическом интерфейсе Python
  • не может установить цвет фона ttk python os x, используя стили
  • Python / ttk / tKinter - передача аргумента нажатием кнопки func?
  • Python: ttk: отключить / включить кнопку
  • Как отредактировать стиль заголовка в Treeview (Python ttk)
  • Изменить тип события события для виджетов или использовать метод .trace_variable ()?
  • Как контролировать выделение выделения со списком tkinter
  • Как изменить цвет ttk.progressBar в python
  • Python - лучший язык программирования в мире.