在保留检查可用选项的可能性的同时,是否有解决方案来保护tkinter
OptionMenu
?
背景:我有一个tkinter OptionMenu
,其中包含可供用户“快速加载”到应用程序中的一系列文件。但是,可能是用户无权加载新文件。
我现在通过将OptionMenu
置于disabled
状态来表明这一点。但是,下拉列表无法再扩展。意味着用户无法查看可用文件。
答案 0 :(得分:2)
您可以禁用菜单的每个条目,而不必使用menu.entryconfigure(<index>, state='disabled')
来完全禁用选项菜单。
选项菜单的菜单存储在“菜单”属性中:
import tkinter as tk
root = tk.Tk()
var = tk.StringVar(root)
opmenu = tk.OptionMenu(root, var, *['item %i' % i for i in range(5)])
opmenu.pack()
menu = opmenu['menu']
for i in range(menu.index('end') + 1):
menu.entryconfigure(i, state='disabled')
因此,您可以查看菜单中的所有项目,但无法单击。
答案 1 :(得分:2)
是的,可以禁用菜单,但仍然可以打开菜单以查看列表。 OptionMenu
中使用的菜单是tkinter Menu()
,您可以访问它。
示例:
Op = OptionMenu(root, var, 'First', 'Second', 'Third')
Op.pack()
# Op_Menu is the Menu() class used for OptionMenu
Op_Menu = Op['menu']
然后,您可以使用Op
菜单和Menu()
进行任何操作
我们可以根据用户使用menu.entryconfig(index, options)
来配置state = 'disabled' / 'normal'
。
示例:
import tkinter as tk
root = tk.Tk()
root.geometry('250x250+100+100')
str = tk.StringVar()
str.set('Select')
Op = tk.OptionMenu(root, str, "First", "Second", "Third")
Op.pack()
# This will disable the First and Third entries in the Op
# state = 'disable' / 'normal'
Op['menu'].entryconfig(0, state='disable')
Op['menu'].entryconfig("Third", state='disable')
entries = Op['menu'].index('end') # This will get the total no. of entries.
# If you want to disable all of the entries uncomment below 2 lines.
# for i in range(entries+1):
# Op['menu'].entryconfig(i, state='disable')
root.mainloop()
为了更好地了解Menu()
类中check the source code of OptionMenu()
class内如何定义OptionMenu
。 (从3959行开始)