检查所选的tkinter option菜单项

2024-03-29 10:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

如何检查用户是否从hopOptions选择中选择了“Other”,然后启用otherEntry?如果他们选择其他选项之一,则再次禁用它。在

    class Interface():
        def __init__(self, window):
            frame = Frame(window)
            frame.pack()

            self.hopLabel = Label(frame, text="Hop:", anchor=E)
            self.hopLabel.grid(row=0, column=0, sticky=EW)

            hops = range(0,6)
            hops.append("Other")

            self.selectedHop = StringVar(frame)
            self.selectedHop.set(hops[0])
            self.hopOptions = OptionMenu(frame, self.selectedHop, *hops)
            self.hopOptions.grid(row=0, column=2, sticky=EW)

            self.otherEntry = Entry(frame, state=DISABLED)
            self.otherEntry.grid(row=0, column=1, sticky=EW)

    root = Tk()

    app = Interface(root)

    root.mainloop()

Tags: selfcolumnrootwindowframeinterfacegridrow
2条回答

将选项菜单绑定到命令,并将另一个方法添加到类中。只要菜单中的某个选项发生更改,该命令都将以值作为参数运行类方法。您可以在那里进行验证以更新otherEntry小部件。另外,我建议不要做from Tkinter import *,因为看起来这就是你所做的。通常导入整个包可能与您的命名空间冲突。这应该适合您的需要:

from Tkinter import *

class Interface():
        def __init__(self, window):
            frame = Frame(window)
            frame.pack()

            self.hopLabel = Label(frame, text="Hop:", anchor=E)
            self.hopLabel.grid(row=0, column=0, sticky=EW)

            hops = range(0,6)
            hops.append("Other")

            self.selectedHop = StringVar(frame)
            self.selectedHop.set(hops[0])
            self.hopOptions = OptionMenu(frame, self.selectedHop, *hops, command=self.optupdate)
            self.hopOptions.grid(row=0, column=2, sticky=EW)

            self.otherEntry = Entry(frame, state=DISABLED)
            self.otherEntry.grid(row=0, column=1, sticky=EW)

        def optupdate(self, value):
            if value == "Other":
                self.otherEntry.config(state=NORMAL)
            else:
                self.otherEntry.config(state=DISABLED)

if __name__ == "__main__":
    root = Tk()
    app = Interface(root)
    root.mainloop()

作为iChar的command方法的替代方法,使用selectedHop.trace注册一个函数,该函数将在所选项发生更改时被调用。在

from Tkinter import *

class Interface():
    def __init__(self, window):
        frame = Frame(window)
        frame.pack()

        self.hopLabel = Label(frame, text="Hop:", anchor=E)
        self.hopLabel.grid(row=0, column=0, sticky=EW)

        hops = range(0,6)
        hops.append("Other")

        self.selectedHop = StringVar(frame)
        self.selectedHop.set(hops[0])
        self.selectedHop.trace("w", self.selected_hop_changed)
        self.hopOptions = OptionMenu(frame, self.selectedHop, *hops)
        self.hopOptions.grid(row=0, column=2, sticky=EW)

        self.otherEntry = Entry(frame, state=DISABLED)
        self.otherEntry.grid(row=0, column=1, sticky=EW)

    def selected_hop_changed(self, *args):
        value = self.selectedHop.get()
        if value == "Other":
            self.otherEntry.config(state=NORMAL)
        else:
            self.otherEntry.config(state=DISABLED)


root = Tk()

app = Interface(root)

root.mainloop()

相关问题 更多 >