Chr*_*ung 6 python state tkinter widget
假设我有2个输入小部件,1个选项菜单(下拉列表)和1个tkinter按钮.如何将按钮小部件状态设置为DISABLED,直到用户填充所有3个小部件?这就是我目前所拥有的:
import Tkinter as tk
root = tk.Tk()
entry1=tk.Entry(root,width=15).grid(row=1,column=1)
entry2=tk.Entry(root,width=15).grid(row=1,column=2)
choices=('a','b','c')
var=tk.StringVar(root)
option=tk.OptionMenu(root,var,*choices)
option.grid(row=1,column=3)
button=tk.Button(root,text="submit")
button.grid(row=1,column=4)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
试过这种方式,但我不认为这是正确的方法.
import Tkinter as tk
root = tk.Tk()
def myfunction(event):
x=var.get()
y=entry1.get()
z=entry2.get()
print len(x),":",len(y),":",len(z)
if len(y)>0 and len(x)>0 and len(z)>0:
button.config(state='normal')
else:
button.config(state='disabled')
entry1=tk.Entry(root,width=15)
entry1.grid(row=1,column=1)
entry2=tk.Entry(root,width=15)
entry2.grid(row=1,column=2)
choices=('a','b','c')
var=tk.StringVar(root)
option=tk.OptionMenu(root,var,*choices)
option.grid(row=1,column=3)
button=tk.Button(root,text="submit")
button.grid(row=1,column=4)
root.bind("<Enter>", myfunction)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
Tkinter变量有一个调用trace添加观察者的方法,因此当值发生变化时会调用回调函数.我认为它比root.bind("<Enter>", myfunction)以下更有效:
import Tkinter as tk
root = tk.Tk()
def myfunction(*args):
x = var.get()
y = stringvar1.get()
z = stringvar2.get()
if x and y and z:
button.config(state='normal')
else:
button.config(state='disabled')
stringvar1 = tk.StringVar(root)
stringvar2 = tk.StringVar(root)
var = tk.StringVar(root)
stringvar1.trace("w", myfunction)
stringvar2.trace("w", myfunction)
var.trace("w", myfunction)
entry1 = tk.Entry(root, width=15, textvariable=stringvar1)
entry1.grid(row=1,column=1)
entry2 = tk.Entry(root, width=15, textvariable=stringvar2)
entry2.grid(row=1,column=2)
choices = ('a','b','c')
option = tk.OptionMenu(root, var, *choices)
option.grid(row=1,column=3)
button = tk.Button(root,text="submit")
button.grid(row=1, column=4)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20551 次 |
| 最近记录: |