Skip to main content
 首页 » 编程设计

python之如何禁用 OptionMenu 中的单个选项

2025年05月04日17myhome

如果用户从 OptionMenu 列表中选择了一个选项,那么该选项应该被禁用。

示例:如果用户选择“a”,那么选项“a”应该被禁用,然后用户只能选择 b 或 c。我尝试了下面的代码,但它返回了如图所示的错误。我不需要 menubutton。 OptionMenu 将满足我的目的,但不是 menubutton。

import tkinter as tk 
from tkinter import * 
 
class Disable_state(Frame): 
    def __init__(self, parent): 
        Frame.__init__(self, parent) 
        self.parent = parent 
        va = StringVar() 
        NAMES = { 'a' : 0, 'b' : 1, 'c' : 2 } 
        op = list(NAMES.keys()) 
        self.menu = OptionMenu(self.parent, va, *op,command = lambda op: self.disable_option(op)) 
        self.menu.grid(column=0, row=0) 
    def disable_option(self,op): 
        self.menu.config(op, state = "disabled") 
 
 
if __name__ =="__main__": 
    root= Tk() 
    o = Disable_state(root) 
    root.mainloop() 

错误是

self.menu.config(op, state = "disabled") 
  File "C:\Python34\lib\tkinter\__init__.py", line 1319, in configure 
    return self._configure('configure', cnf, kw) 
  File "C:\Python34\lib\tkinter\__init__.py", line 1303, in _configure 
    cnf = _cnfmerge((cnf, kw)) 
  File "C:\Python34\lib\tkinter\__init__.py", line 105, in _cnfmerge 
    cnf.update(c) 
ValueError: dictionary update sequence element #0 has length 1; 2 is  required     

请您参考如下方法:

似乎可以访问子部件菜单,并使用entryconfigure 方法可以禁用条目

self.menu['menu'].entryconfigure(op, state = "disabled")