tkinter:如何在选项菜单中获得价值?

时间:2019-01-12 10:50:07

标签: python tkinter

我试图使用OptionMenu来通过按钮小部件分配命令,但是由于某些原因,我无法获得正确的值。 所以我的代码遵循以下原则:

root = tk.Tk()
choice1 = tk.StringVar()
choice1.set("DEFAULT")
options1 = tk.OptionMenu(root, choice1, "text1", "text2")
options1.place(x=320, y=355)

start_button = tk.Button(root, text="start")
start_button.place(x=200, y=400)
if choice1.get() == "text1":
    start_button.configure(command=lambda: print("some text"))
root.mainloop()

如果该选项位于"text1"上则不起作用,但是如果我将if choice1.get() == "text1"更改为if choice1.get() == "DEFAULT"则似乎可行,但是对于每个选项,不仅默认。

如何根据OptionMenu小部件中的选择将特定命令分配给外部按钮?

顺便说一句,如果我将命令更改为打印choice1.get(),它的确会打印出正确的选项(而我只是将命令分配给按钮小部件而没有使用if语句)。

编辑: 根据要求,游戏为连接4,选项为“人”和PC。 我想做的是有2个选项菜单,一个用于播放器1(黄色),一个用于播放器2(红色)。选择“人与人”后,我希望使用“开始”按钮将我定向到特定功能。

这是我写的(需要编辑,很抱歉):

    self.__root = root
    self.__global_size = 70
    self.game = Game()

    menu_draw = tk.Canvas(self.__root, width=500, height=500)
    menu_draw.pack()
    self.__root.resizable(0, 0)
    welcome_label = tk.Label(self.__root, text=WELCOME_MSG, font=("Comic Sans MS", 20), bg="White", fg="Blue",
                             relief="groove")
    menu_draw.create_oval((100, 250), (200, 350), fill="red")
    menu_draw.create_oval((300, 250), (400, 350), fill="Yellow")
    welcome_label.place(x=60, y=40)
    choice1 = tk.StringVar()
    choice1.set("Yellow")
    options1 = tk.OptionMenu(self.__root, choice1, "Human", "PC")
    options1.configure(bg="Yellow")
    options1.place(x=320, y=355)
    choice2 = tk.StringVar()
    choice2.set("Red")
    options2 = tk.OptionMenu(self.__root, choice2, "Human", "PC")
    options2.configure(bg="Red")
    options2.place(x=100, y=355)
    start_button = tk.Button(self.__root, text="START", font=("Comic Sans MS", 20), bg="White", fg="Blue")
    start_button.place(x=200, y=400)
    if choice1.get() == "Human" and choice2.get() == "Human":
        start_button.configure(command=lambda: self.mainm(self.__root))
    self.__root.mainloop()

但是,这不起作用。如果我分别将"Human"分别替换为"Yellow""Red",则它可以工作,但对所选的每个选项都有效。 self.mainm指示执行另一项功能,该功能破坏旧根并创建新根(以创建木板和规则)。

0 个答案:

没有答案