• TKinter При нажатии на кнопку ничего не происходит. Как это исправить?

    drygdryg
    @drygdryg
    Python-разработчик
    Когда вы нажимаете на одну из трёх кнопок, вызывается соответствующая функция, которая изменяет глобальную переменную choice. Если вы хотите, чтобы после нажатия кнопки оглашался результат, вынесите логику определения исхода игры в отдельную функцию и вызывайте её в обработчиках кнопок. Простейшее решение проблемы может выглядеть так:
    spoiler

    import random
    from tkinter import *  
    
    
    window = Tk()
    
    textgame = "Давай играть! Выбирай:\nКамень,\nНожницы,\nБумага.\n"
    choiceC = random.choice(['Камень', 'Ножницы', 'Бумага'])
    choice = "none"
    
    
    lblr = Label(window, text="test", font=("Arial Bold", 15))
    lblr.grid(column=1, row=2)
    
    
    def win():
      global choiceC
      lblr.configure(text=choiceC + "." + " Вы победили!")
    
    
    def lose():
      global choiceC
      lblr.configure(text=choiceC + "." + " Вы проиграли!")
    
    
    def announce_outcome():
      """Определяет исход игры"""
      if choice =="Камень" and choiceC =="Ножницы":
        win()
      elif choice =="Ножницы" and choiceC =="Бумага":
        win()
      elif choice =="Бумага" and choiceC =="Камень":
        win()
      elif choice =="Камень" and choiceC =="Бумага":
        lose()
      elif choice =="Ножницы" and choiceC =="Камень":
        lose()
      elif choice =="Бумага" and choiceC =="Ножницы":
        lose()
      elif choice == choiceC:
        print("\n",choiceC + "." + " Ничья!")
    
    
    def clickedRock():
      global choice
      choice = "Камень"
      announce_outcome()
    
    
    def clickedScissors():
      global choice
      choice = "Ножницы"
      announce_outcome()
    
    
    def clickedPaper():
      global choice
      choice = "Бумага"
      announce_outcome()
    
    
    window.title("Rock, scissors, paper with graphics")
    window.geometry('400x250')
    
    lbl = Label(window, text=textgame, font=("Arial Bold", 15))
    lbl.grid(column=1, row=0)
    
    btnr = Button(window, text="Камень", command=clickedRock)
    btnr.grid(column=0, row=1)
    
    btns = Button(window, text="Ножницы", command=clickedScissors)
    btns.grid(column=1, row=1)
    
    btnp = Button(window, text="Бумага", command=clickedPaper)
    btnp.grid(column=2, row=1)
    
    window.mainloop()

    Ответ написан
    Комментировать
  • TKinter При нажатии на кнопку ничего не происходит. Как это исправить?

    @Kash_Tan
    Потому что все сразу как только запускается код, нужно чтобы все проверялось при нажатии
    Как-то так

    import random
    from tkinter import *
    
    textgame = "Давай играть! Выбирай:\nКамень,\nНожницы,\nБумага.\n"
    
    def check(choice):
      choiceC = random.choice(['Камень', 'Ножницы', 'Бумага'])
    
      if choice == "Камень" and choiceC == "Ножницы":
        win(choiceC)
    
      if choice == "Ножницы" and choiceC == "Бумага":
        win(choiceC)
    
      if choice == "Бумага" and choiceC == "Камень":
        win(choiceC)
    
      if choice == "Камень" and choiceC == "Бумага":
        lose(choiceC)
    
      if choice == "Ножницы" and choiceC == "Камень":
        lose(choiceC)
    
      if choice == "Бумага" and choiceC == "Ножницы":
        lose(choiceC)
    
      if choice == choiceC:
        lblr['text'] = choiceC + "." + " Ничья!"
    
    def win(choiceC):
      lblr['text'] = choiceC + "." + " Вы победили!"
    
    def lose(choiceC):
      lblr['text'] = choiceC + "." + " Вы проиграли!"
    
    window = Tk()
    
    window.title("Rock, scissors, paper with graphics")
    window.geometry('400x250')
    
    lbl = Label(window, text=textgame, font=("Arial Bold", 15))
    lbl.grid(column=1, row=0)
    
    btnr = Button(window, text="Камень", command=lambda: check('Камень'))
    btnr.grid(column=0, row=1)
    
    btns = Button(window, text="Ножницы", command=lambda: check('Ножницы'))
    btns.grid(column=1, row=1)
    
    btnp = Button(window, text="Бумага", command=lambda: check('Бумага'))
    btnp.grid(column=2, row=1)
    
    lblr = Label(window, text="test", font=("Arial Bold", 15))
    lblr.grid(column=1, row=2)
    
    window.mainloop()

    Ответ написан
    Комментировать