tkinter: как получить значение в опционах? - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь использовать 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).

Edit: Согласно запросу, игра подключается 4, и варианты являются Человек и ПК. То, что я пытаюсь сделать, это иметь 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 направляет другую функцию, которая уничтожает старый корень и создает новый (для создания доски и правил).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...