在下面的代码中,我每次在组合框中选择1时都尝试禁用entry1小部件,当我在组合框中选择2时禁用entry2。
这是我的代码:
from Tkinter import *
import ttk
def refresh():
if v.get() == 'A':
entry1.state(['disabled'])
entry2.state(['!disabled'])
elif v.get() == 'B':
entry2.state(['disabled'])
entry1.state(['!disabled'])
root = Tk()
v = StringVar()
var = StringVar()
entry1 = ttk.Entry (root, textvariable= var)
entry1.grid(row=2, column=2, sticky=(E,W))
entry2 = ttk.Entry (root, textvariable= var)
entry2.grid(row=4, column=2, sticky=(E,W))
v_list=['A','B']
v.set(v_list[1])
v_optionmenu = apply(OptionMenu, (root,v) + tuple(v_list))
v_optionmenu.grid(column=4,row=11,sticky=(W,E))
var = v
root.bind('<Return>', lambda e: refresh)
root.mainloop()
我想创建基于条件的启用和禁用小部件。 我的条件通常是:
在组合框中选择 选择radiobutton
请建议我如何去做。
答案 0 :(得分:3)
您似乎缺少的部分是您可以使用configure
方法更改状态。此外,您可以在变量上设置跟踪,以便在值更改时调用函数。既然你说要根据组合框改变状态,那就是你要使用的技术。你可以用radiobutton做类似的技巧,虽然radiobuttons也有一个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()
答案 1 :(得分:-1)
def refresh(*args):
if v.get() == 'Disable' :
fb_entry.state(['disabled'])
fw_entry.state(['disabled'])
fb.set('')
fw.set('')
elif v.get() == 'Enable' :
fb_entry.state(['!disabled'])
fw_entry.state(['!disabled'])
root = Tk()
v = StringVar()
var = StringVar()
entry1 = ttk.Entry (root, textvariable= var)
entry1.grid(row=2, column=2, sticky=(E,W))
entry2 = ttk.Entry (root, textvariable= var)
entry2.grid(row=4, column=2, sticky=(E,W))
v_list=['Disable','Enable']
v.set(v_list[1])
v_optionmenu = apply(OptionMenu, (root,v) + tuple(v_list))
v_optionmenu.grid(column=4,row=11,sticky=(W,E))
var = v
root.bind('<Enter>',refresh_widget)
root.mainloop()