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

import random
from tkinter import *  

textgame = "Давай играть! Выбирай:\nКамень,\nНожницы,\nБумага.\n"
choiceC = random.choice(['Камень', 'Ножницы', 'Бумага'])
choice = "none"

def clickedRock():
	global choice
	choice = "Камень"

def clickedScissors():
	global choice
	choice = "Ножницы"

def clickedPaper():
	global choice
	choice = "Бумага"

def win():
	global choiceC
	lblr.configure(choiceC + "." + " Вы победили!")

def lose():
	global choiceC
	lblr.configure(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=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)

lblr = Label(window, text="test", font=("Arial Bold", 15))  
lblr.grid(column=1, row=2)

if choice =="Камень" and choiceC =="Ножницы":
	win()

if choice =="Ножницы" and choiceC =="Бумага":
	win()

if choice =="Бумага" and choiceC =="Камень":
	win()

if choice =="Камень" and choiceC =="Бумага":
	lose()

if choice =="Ножницы" and choiceC =="Камень":
	lose()

if choice =="Бумага" and choiceC =="Ножницы":
	lose()

if choice == choiceC:
	print("\n",choiceC + "." + " Ничья!")

window.mainloop()

После нажатия на кнопки не чего не происходит.
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@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()

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
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()

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы