Кусок, который вам, похоже, не хватает, - это то, что вы можете изменить состояние с помощью метода configure
. Кроме того, вы можете установить трассировку для переменной, чтобы функция вызывалась при изменении значения. Так как вы сказали, что хотите изменить состояние на основе выпадающего списка, именно эту технику вы бы использовали. Вы можете сделать аналогичный трюк с радиокнопкой, хотя радиокнопки также имеют опцию command
, которую можно использовать вместо трассы.
Вот пример, показывающий, как вызвать функцию «обновления» при изменении комбинированного списка:
import Tkinter as tk
import ttk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.choiceVar = tk.StringVar()
self.e1 = ttk.Entry(self)
self.e2 = ttk.Entry(self)
self.cb = ttk.Combobox(self, textvariable=self.choiceVar,
values=["Enable 1 only", "Enable 2 only"])
self.cb.set(self.cb.cget("values")[0])
self.cb.pack(side="top")
self.e1.pack(side="top")
self.e2.pack(side="top")
self.choiceVar.trace("w", self.on_trace_choice)
self.refresh()
def on_trace_choice(self, name, index, mode):
self.refresh()
def refresh(self):
choice = self.cb.get()
if choice == "Enable 1 only":
self.e1.configure(state="normal")
self.e2.configure(state="disabled")
else:
self.e1.configure(state="disabled")
self.e2.configure(state="normal")
if __name__ == "__main__":
app = SampleApp()
app.mainloop()