1

在下面显示的简单代码中,我有两个 OptionMenu 小部件:

    variable = StringVar(win1)                               
    variable.set(number(number2))
    type = OptionMenu(win1, variable, "None", "Clear", "Dark", "Heavy", )
    type.grid(row=i, column=3, sticky="nsew", padx=1, pady=1)


    variableunit = StringVar(win1)
    variableunit.set(unit)
    unit = OptionMenu(win1, variableunit, "colour", "shade")
    unit.grid(row=i, column=5, sticky="nsew", padx=1, pady=1)

我已经尝试使用回调函数进行跟踪,但到目前为止还没有奏效。我想在第一个菜单中选择“重”时链接,第二个菜单总是“颜色”。对于其余选项,第二个菜单必须始终默认为“阴影”,但可以更改。

如果有人可以帮助我,我将不胜感激。我已经查看了带有变量和跟踪的 effbot 站点,但仍然卡住了。

4

1 回答 1

1

目前尚不清楚您想要什么,但我认为应该这样做。

在第一个菜单中选择“重”时,在第二个菜单中选择“颜色”并且该菜单被禁用(无法选择其他任何内容)。当在第一个菜单中选择其他内容时,第二个菜单会转到“mm”并再次启用。

from Tkinter import *

class app:
    def __init__(self, root):
        win1 = Frame(root)
        win1.grid(row=0,column=0)

        self.variable = StringVar(win1)                               
        self.variable.set(42)
        self.type = OptionMenu(win1, self.variable,
                          "None", "Clear", "Dark", "Heavy",
                          command = self.varMenu)
        self.type.grid(row=1, column=3, sticky="nsew", padx=1, pady=1)


        self.variableunit = StringVar(win1)
        self.variableunit.set('mm')
        self.unit = OptionMenu(win1,
                          self.variableunit, "mm", "colour", "shade")
        self.unit.grid(row=1, column=5, sticky="nsew", padx=1, pady=1)

    def varMenu(self, selection):
        if selection == "Heavy":
            self.variableunit.set("colour")
            self.unit.config(state = DISABLED)
        else:
            self.variableunit.set("mm")
            self.unit.config(state = NORMAL)

root = Tk()
a = app(root)
root.mainloop()
于 2012-06-19T11:04:46.470 回答