1

以下に示す単純なコードには、2 つの 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)

コールバック関数でトレースを試みましたが、今のところうまくいきません。最初のメニューで「重い」を選択したときにリンクしたいのですが、2番目のメニューは常に「色」です。残りの選択肢については、2 番目のメニューは常にデフォルトの「シェード」にする必要がありますが、変更することができます。

誰かが私を助けてくれることに感謝します。変数とトレースを使用して effbot サイトを既に見ましたが、まだ行き詰まっています。

4

1 に答える 1

1

あなたが何を望んでいるのかは明確ではありませんが、これでうまくいくはずです。

最初のメニューで「ヘビー」を選択すると、2 番目のメニューで「色」が選択され、そのメニューは無効になります (他のものは選択できません)。最初のメニューで何か他のものを選択すると、2 番目のメニューが「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 に答える