from tkinter import *
import random
from collections import Counter
root = Tk()
root.title("Random")
root.geometry("600x400")
root.resizable(False, False)
def open_saw():
saw_wn = Tk()
saw_wn.title("Random App - Spin a Wheel")
saw_wn.geometry("600x400")
saw_wn.resizable(False, False)
saw_wn.mainloop()
def open_coin():
c_wn = Tk()
c_wn.title("Random App - Flip a Coin")
c_wn.geometry("600x400")
c_wn.resizable(False, False)
Label(c_wn, text=" ").grid(row=0,
column=0)
Label(c_wn, text="Flip the coin below!", font=("Yu Gothic UI", 12)).grid(row=0, column=1)
Label(c_wn, text=' ').grid(row=1, column=1)
coin_values = ["Heads", "Tails"]
coin_face = random.choice(coin_values)
def flip():
if coin_face == "Heads":
Label(c_wn, text="Coin: Heads").place(anchor='s')
else:
Label(c_wn, text="Coin: Tails").place(anchor='s')
coin = Button(c_wn, text='coin', padx=100, pady=90, command=flip)
coin.place(relx=0.5, rely=0.5, anchor=CENTER)
c_wn.mainloop()
def open_average():
avg_wn = Tk()
avg_wn.title("Random App - Averages")
avg_wn.geometry("840x300")
Label(avg_wn, text=" ").grid(row=0, column=0)
avg_instruct = Label(avg_wn, text="Enter your values below to get the averages in mean, median, and mode(put a "
"space between commas")
avg_instruct.config(font=("Yu Gothic UI", 10))
avg_instruct.grid(row=0, column=1)
Label(avg_wn, text=" ").grid(row=1, column=0)
entry = Entry(avg_wn)
entry.grid(row=2, column=1)
def calculate():
list_data = entry.get().split(', ')
list_data = [float(i) for i in list_data]
mean = sum(list_data) / len(list_data)
Label(avg_wn, text='Mean').grid(row=5, column=0)
Label(avg_wn, text=str(mean)).grid(row=6, column=0)
list_data_len = len(list_data)
list_data.sort()
if list_data_len % 2 == 0:
median1 = list_data[list_data_len // 2]
median2 = list_data[list_data_len // 2 - 1]
median = (median1 median2) / 2
else:
median = list_data[list_data_len // 2]
Label(avg_wn, text='Median: ' str(median)).grid(row=5, column=1)
Label(avg_wn, text=median).grid(row=6, column=1)
list_data_for_mode = Counter(list_data)
get_mode = dict(list_data_for_mode)
mode = [k for k, v in get_mode.items() if v == max(list(list_data_for_mode.values()))]
if len(mode) == list_data_len:
get_mode = ["No mode found"]
else:
get_mode = [str(i) for i in mode]
Label(avg_wn, text="Mode: ").grid(row=5, column=2)
Label(avg_wn, text=get_mode[0]).grid(row=6, column=2)
Label(avg_wn, text=" ").grid(row=3, column=0)
Button(avg_wn, text='Enter', command=calculate).grid(row=4, column=1)
Label(root, text=" ").grid(row=0, column=0)
title = Label(root, text="Welcome to Random")
title.config(font=("Yu Gothic UI", 24))
title.grid(row=0, column=1)
button1 = Button(root, text=" Spin a wheel ", padx=80, pady=25, command=open_saw)
button1.place(x=2.25, y=100)
button2 = Button(root, text="Calculate mean, mode, median, and range", padx=20, pady=25, command=open_average)
button2.place(x=325, y=100)
button3 = Button(root, text="Flip a Coin", padx=125, pady=25, command=open_coin)
button3.place(x=2.25, y=200)
button4 = Button(root, text="Generate a number", padx=82, pady=25)
button4.place(x=325, y=200)
root.mainloop()
I want the function to display heads or tails(randomly). Instead, the function displays nothing and ignores the function. I have also tried printing the value instead of displaying it on tkinter, but it only shows heads and not tails. If any additional details are needed to solve my issue please comment and I will provide additional details.
CodePudding user response:
In the function open_coin
, when the button coin
is clicked, you are creating the label
but not specifying the x and y coordinates in place
, and that too creating everytime the button is pressed. So, create a label to display the result and keep changing its text using config
.
And the random
function is called only once, so keep it inside the flip
function to call everytime in order to get a new random coin value.
.
.
CoinLabel = Label(c_wn, text="") #will be used to display the result
CoinLabel.place(relx=0.5, rely=0.2, anchor='s')
def flip():
coin_values = ["Heads", "Tails"]
coin_face = random.choice(coin_values)
print(coin_face)
if coin_face == "Heads":
CoinLabel.config(text="Coin: Heads")
else:
CoinLabel.config(text="Coin: Tails")
coin = Button(c_wn, text='coin', padx=100, pady=90, command=flip)
coin.place(relx=0.5, rely=0.5, anchor=CENTER)
.
.