I am trying to make rock paper scissors with a Tkinter GUI, but for some reason in my "run" function (unfinished) player_number
is undefined,
def run():
result.grid(column=3, row=1)
if player_number == "1":
rock.grid(column=2, row=2)
add_fillers()
choose_player_number()
run()
even though I defined it in these two functions (triggered by buttons) further up in the code:
def oneplayer():
title.configure(text = "One player")
title.grid(column=3, row=0)
global player_number
player_number = "1"
one_player.destroy()
two_players.destroy()
def twoplayers():
title.configure(text = "Two players")
title.grid(column=3, row=0)
global player_number
player_number = "2"
one_player.destroy()
two_players.destroy()
I tried setting the variables to global
but that didn't work. Here's all my code:
import random
from random import randint
import tkinter as tk
from tkinter import *
window = tk.Tk()
window.geometry("1400x860")
window.title = "Rock paper scissors"
result = Label(window, text= "result will appear here", bg="green")
def oneplayer():
title.configure(text = "One player")
title.grid(column=3, row=0)
global player_number
player_number = "1"
one_player.destroy()
two_players.destroy()
def twoplayers():
title.configure(text = "Two players")
title.grid(column=3, row=0)
global player_number
player_number = "2"
one_player.destroy()
two_players.destroy()
one_player = Button(window, text = "One Player", command = oneplayer)
two_players = Button(window, text= "Two players", command = twoplayers)
title = Label(window, text = "Rock paper scissors" , bg= "blue", fg = "white", font= "Times")
title.grid(column=3, row=0)
def add_fillers():
filler = Label(window, text = " ")
filler.grid(column=1, row=0)
filler2 = Label(window, text = " ")
filler2.grid(column=0, row=0)
filler3 = Label(window, text = " ")
filler3.grid(column=2, row=0)
def choose_player_number():
one_player.grid(column= 2, row=1)
two_players.grid(column= 4, row=1)
computer_input = ""
def computer_choice():
computer_input = randint("1", "2", "3")
if computer_input == "1":
computer_value = "Rock"
elif computer_input == "2":
computer_value = "paper"
else:
computer_value = "scissors"
computer_result = Label(window, text= "the computer's choice was:" + computer_value)
return computer_input
def win():
result.configure(text= "You Win")
def loose():
result.configure(text= "You loose")
def draw():
result.configure(text= "Draw")
def evaluate_rock():
computer_choice()
if computer_input == "3":
win()
elif computer_input == "2":
loose()
elif computer_input == "1":
draw()
else:
print ("error")
rock = Button(window, text="Rock", command= evaluate_rock, fg="green", bg="blue")
def run():
result.grid(column=3, row=1)
if player_number == "1":
rock.grid(column=2, row=2)
add_fillers()
choose_player_number()
run()
window.mainloop()
I am trying to make rock paper scissors with a Tkinter GUI, but for some reason in my "run" function (unfinished) player_number is undefined,
The problem can be fixed.
Just add the parameter player_number to the run()
function.
Snippet:
def run(player_number):
result.grid(column=3, row=1)
if player_number == "1":
rock.grid(column=2, row=2)
add_fillers()
choose_player_number()
run(1)
Screenshot: