Posts: 14
Threads: 7
Joined: Dec 2020
from tkinter import *
from random import randint
def rollD4():
label = Label(root, text=randint(1, 4), font=(None, 12), height=2, width=2).grid(row=0, column=2)
def rollD6():
label = Label(root, text=randint(1, 6), font=(None, 12), height=2, width=2).grid(row=1, column=2)
def rollD8():
label = Label(root, text=randint(1, 8), font=(None, 12), height=2, width=2).grid(row=2, column=2)
def rollD10():
label = Label(root, text=randint(1, 10), font=(None, 12), height=2, width=2).grid(row=3, column=2)
def rollD12():
label = Label(root, text=randint(1, 12), font=(None, 12), height=2, width=2).grid(row=4, column=2)
def rollD20():
label = Label(root, text=randint(1, 20), font=(None, 12), height=2, width=2).grid(row=5, column=2)
def rollD100():
label = Label(root, text=randint(1, 100), font=(None, 12), height=2, width=2).grid(row=6, column=2)
root = Tk()
root.title("Table Top Pal (beta)")
root.geometry("500x392") # This is how to resize your root box. (width x height)
menubar = Menu(root)
root.config(menu=menubar)
fileMenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label="File",menu=fileMenu)
fileMenu.add_command(label="Exit",command=root.destroy)
button1 = Button(root, text="D4", command=rollD4, width=10, height=3)
button1.grid(row=0, column=0)
button2 = Button(root, text="D6", command=rollD6, width=10, height=3)
button2.grid(row=1, column=0)
button3 = Button(root, text="D8", command=rollD8, width=10, height=3)
button3.grid(row=2, column=0)
button4 = Button(root, text="D10", command=rollD10, width=10, height=3)
button4.grid(row=3, column=0)
button5 = Button(root, text="D12", command=rollD12, width=10, height=3)
button5.grid(row=4, column=0)
button6 = Button(root, text="D20", command=rollD20, width=10, height=3)
button6.grid(row=5, column=0)
button7 = Button(root, text="D100", command=rollD100, width=10, height=3)
button7.grid(row=6, column=0)
root.mainloop() I am just trying to make a button that clears all of the dice roller outputs.
Posts: 165
Threads: 7
Joined: Nov 2018
One way is to use textvariables in your label's the main methods are set and get.
I would make a list of the dice and set them all to ''. here's an example with the 4d only
from tkinter import *
from random import randint
def rollD4():
number= str(randint(1,4))
dice_1.set(number)
def on_clear():
dice_1.set('')
root = Tk()
root.title("Table Top Pal (beta)")
root.geometry("500x592") # This is how to resize your root box. (width x height)
menubar = Menu(root)
root.config(menu=menubar)
fileMenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label="File",menu=fileMenu)
fileMenu.add_command(label="Exit",command=root.destroy)
dice_1= StringVar()
button1 = Button(root, text="D4", command=rollD4, width=10, height=3)
button1.grid(row=0, column=0)
clear_btn= Button(root, text='Clear All', command= on_clear)
clear_btn.grid(row=2,column=0)
label_1 = Label(root, textvariable=dice_1, font=(None, 12), height=2, width=2).grid(row=0, column=2)
root.mainloop()
Posts: 6,779
Threads: 20
Joined: Feb 2020
import tkinter as tk
from random import randint
dice = [4, 6, 8, 10, 12, 20, 100]
def roll(label, sides):
"""Roll die and update label"""
label['text'] = str(randint(1, sides))
def clear_all(labels):
"""Blank out all the labels"""
for l in labels:
l['text'] = ''
root = tk.Tk()
# Make a bunch of buttons and label. Each button calls "roll()" which rolls
# a die and displays the value in the label.
all_labels = []
for row, sides in enumerate(dice):
label = tk.Label(root, text = '', width=3)
label.grid(column=1, row=row, padx=5, pady=5, sticky='NEWS')
all_labels.append(label)
button = tk.Button(root, text=f'D{sides}',
command=lambda x=label,y=sides: roll(x, y))
button.grid(column=0, row=row, padx=5, pady=5, sticky='NEWS')
# Make a button to clear all the labels
button = tk.Button(root, text='Clear All',
command=lambda: clear_all(all_labels))
button.grid(column=0, row=len(dice), columnspan=2, padx=5, pady=5, sticky='NEWS')
root.mainloop()
Posts: 14
Threads: 7
Joined: Dec 2020
Jesus Christ I wish I knew Python a lot better. That is a MUCH more efficient way of doing it.
Posts: 6,779
Threads: 20
Joined: Feb 2020
I would write the program the same way using almost any language. You don't need to know everything about a language to write effective programs. Extensive knowledge of the language makes programming faster, but you can know everything about Python and still be a crappy Python programmer.
I know almost nothing about Tk. I used it for a job back in 95, but I barely remember anything about it. I am learning a bit about it by answering Tk questions in this forum. I've only been programming in Python for about a year, and mostly in my spare time. I would consider my Python skills to be pretty weak.
Posts: 1
Threads: 0
Joined: Dec 2020
Control the text of the label via text variable and on the button click clear that text variable that's it.
Read more here
|