检查 Tkinter Widget (OptionMenu) 是否被禁用
Checking if Tkinter Widget (OptionMenu) is disabled
我觉得我已经在网上搜索了很长时间,为了我觉得应该非常简单的事情改写了我的问题一千次。
我想知道是否有办法检查 Tkinter 小部件是否处于活动状态(未灰显/禁用)。我有一组 OptionMenus 一开始是禁用的,当他们单击复选框时配置为 state=ACTIVE
,这样用户就可以 select 他们想使用哪个 OptionMenus。
当我尝试 "submit" OptionMenus 中的字段时,我只想要 ACTIVE
的字段。我已经尝试过 if OptionMenu.state == ACTIVE
但后来我收到一个错误,指出 OptionMenu 没有属性状态,即使我之前配置了它。
这是我的代码示例:
from tkinter import *
class Application(Frame):
# Initializing the window and the required variables
def __init__(self, master=None):
Frame.__init__(self, master)
self.checkbox_in_use = BooleanVar(self, False)
self.checkbox = Checkbutton(self, text="check",
var=self.checkbox_in_use,
command=self.check_change
self.checkbox.grid(row=0, column=1, sticky='W')
self.menu = OptionMenu(title_setting,
"Menu",
"Menu",
["Menu1", "Menu2"])
self.menu.grid(row=1, column=1)
self.menu.config(state=DISABLED)
submit = Button(self, text="submit",
command=self.submit_function)
submit.grid(row=2, column=0)
self.master = master
self.init_window()
# Initialize the window
def init_window(self):
self.master.title("Example")
self.pack(fill=BOTH, expand=1)
def check_change(self):
if self.checkbox_in_use.get():
self.menu.config(state=ACTIVE)
else:
self.menu.config(state=DISABLED)
def submit_function(self):
# This is the part I want to do something with.
if self.menu.state == ACTIVE:
print("You are good to go! Do the stuff.")
root = Tk()
root.geometry("400x300")
app = Application(root)
root.mainloop()
谢谢大家的回复。
为此,您只需要 cget()
。 self.menu.cget('state')
会成功的。
也就是说,我想指出您代码中的一些其他内容。
您 Application
class 开头已经有一个 __init__
那么为什么要使用:
# Initialize the window
def init_window(self):
self.master.title("Example")
self.pack(fill=BOTH, expand=1)
您真的不应该从框架 class 内部打包框架,而是在调用 class 时打包框架。另外 pack 在这里不起作用,它会抛出错误。改为这样做:app = Application(root).grid()
.
看看下面重新格式化的例子(cget()
)。
from tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master.title("Example")
self.checkbox_in_use = BooleanVar(self, False)
self.checkbox = Checkbutton(self, text="check", var=self.checkbox_in_use, command=self.check_change)
self.checkbox.grid(row=0, column=1, sticky='W')
self.menu = OptionMenu(master,"Menu","Menu",["Menu1", "Menu2"])
self.menu.grid(row=1, column=1)
self.menu.config(state=DISABLED)
Button(self, text="submit", command=self.submit_function).grid(row=2, column=0)
def check_change(self):
if self.checkbox_in_use.get():
self.menu.config(state=ACTIVE)
else:
self.menu.config(state=DISABLED)
def submit_function(self):
print(self.menu.cget('state'))
root = Tk()
root.geometry("400x300")
app = Application(root).grid()
root.mainloop()
我觉得我已经在网上搜索了很长时间,为了我觉得应该非常简单的事情改写了我的问题一千次。
我想知道是否有办法检查 Tkinter 小部件是否处于活动状态(未灰显/禁用)。我有一组 OptionMenus 一开始是禁用的,当他们单击复选框时配置为 state=ACTIVE
,这样用户就可以 select 他们想使用哪个 OptionMenus。
当我尝试 "submit" OptionMenus 中的字段时,我只想要 ACTIVE
的字段。我已经尝试过 if OptionMenu.state == ACTIVE
但后来我收到一个错误,指出 OptionMenu 没有属性状态,即使我之前配置了它。
这是我的代码示例:
from tkinter import *
class Application(Frame):
# Initializing the window and the required variables
def __init__(self, master=None):
Frame.__init__(self, master)
self.checkbox_in_use = BooleanVar(self, False)
self.checkbox = Checkbutton(self, text="check",
var=self.checkbox_in_use,
command=self.check_change
self.checkbox.grid(row=0, column=1, sticky='W')
self.menu = OptionMenu(title_setting,
"Menu",
"Menu",
["Menu1", "Menu2"])
self.menu.grid(row=1, column=1)
self.menu.config(state=DISABLED)
submit = Button(self, text="submit",
command=self.submit_function)
submit.grid(row=2, column=0)
self.master = master
self.init_window()
# Initialize the window
def init_window(self):
self.master.title("Example")
self.pack(fill=BOTH, expand=1)
def check_change(self):
if self.checkbox_in_use.get():
self.menu.config(state=ACTIVE)
else:
self.menu.config(state=DISABLED)
def submit_function(self):
# This is the part I want to do something with.
if self.menu.state == ACTIVE:
print("You are good to go! Do the stuff.")
root = Tk()
root.geometry("400x300")
app = Application(root)
root.mainloop()
谢谢大家的回复。
为此,您只需要 cget()
。 self.menu.cget('state')
会成功的。
也就是说,我想指出您代码中的一些其他内容。
您 Application
class 开头已经有一个 __init__
那么为什么要使用:
# Initialize the window
def init_window(self):
self.master.title("Example")
self.pack(fill=BOTH, expand=1)
您真的不应该从框架 class 内部打包框架,而是在调用 class 时打包框架。另外 pack 在这里不起作用,它会抛出错误。改为这样做:app = Application(root).grid()
.
看看下面重新格式化的例子(cget()
)。
from tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master.title("Example")
self.checkbox_in_use = BooleanVar(self, False)
self.checkbox = Checkbutton(self, text="check", var=self.checkbox_in_use, command=self.check_change)
self.checkbox.grid(row=0, column=1, sticky='W')
self.menu = OptionMenu(master,"Menu","Menu",["Menu1", "Menu2"])
self.menu.grid(row=1, column=1)
self.menu.config(state=DISABLED)
Button(self, text="submit", command=self.submit_function).grid(row=2, column=0)
def check_change(self):
if self.checkbox_in_use.get():
self.menu.config(state=ACTIVE)
else:
self.menu.config(state=DISABLED)
def submit_function(self):
print(self.menu.cget('state'))
root = Tk()
root.geometry("400x300")
app = Application(root).grid()
root.mainloop()