So I am working on an interactive periodic table project in Python, and am using Tkinter. I have buttons on it that, when clicked, provide info about the element named on the button. It outputs this as a label, and automatically goes away after 5.5 seconds. There is one thing I need to have done, but cannot seem to find a solution for:
I need a setting so that only one label can be displayed at a time. Currently, if I click the same or different buttons multiple times, the labels stack up on each other. I want there to only be one label, so if a new button is clicked, that label will replace the other.
This is the main code, that includes all the Tkinter stuff. I will also include at the bottom the other file I made with all the periodic table library stuff.
from elementsymbols import *
from tkinter import *
def callback_h():
labelh = Label(root, text="Element name: " + str(h.name) + "\n" + "Element symbol: " + str(h.symbol) + "\n" + "Atomic mass: " + str(h.atomic_weight) + "\n" + "Atomic number: " + str(h.atomic_number))
labelh.pack()
labelh.after(5500, lambda: labelh.config(text=''))
def callback_he():
labelhe = Label(root, text="Element name: " + str(he.name) + "\n" + "Element symbol: " + str(he.symbol) + "\n" + "Atomic mass: " + str(he.atomic_weight) + "\n" + "Atomic number: " + str(he.atomic_number))
labelhe.pack()
labelhe.after(5500, lambda: labelhe.config(text=''))
def callback_li():
labelli = Label(root, text="Element name: " + str(li.name) + "\n" + "Element symbol: " + str(li.symbol) + "\n" + "Atomic mass: " + str(li.atomic_weight) + "\n" + "Atomic number: " + str(li.atomic_number))
labelli.pack()
labelli.after(5500, lambda: labelli.config(text=''))
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
# Creation of init_window
def init_window(self):
# changing the title of our master widget
self.master.title("Interactive Periodic Table v1")
# allowing the widget to take the full space of the root window
self.pack(fill=BOTH, expand=1)
# creating a button instance
hbutton = Button(self, text="Hydrogen - H", command=callback_h)
# placing the button on my window
hbutton.place(x=0, y=0)
# all other elements
hebutton = Button(self, text="Helium - He", command=callback_he)
hebutton.place(x=100, y=0)
libutton = Button(self, text="Lithium - Li", command=callback_li)
libutton.place(x=190, y=0)
root = Tk()
# size of the window
root.geometry("600x500")
app = Window(root)
root.mainloop()
That is the main code, here is where it is getting the periodic table info from:
from mendeleev import element
h = element('H')
he = element('He')
li = element('Li')
be = element('Be')
b = element('B')
c = element('C')
n = element('N')
o = element('O')
f = element('F')
ne = element('Ne')
na = element('Na')
mg = element('Mg')
al = element('Al')
si = element('Si')
p = element('P')
s = element('S')
cl = element('Cl')
ar = element('Ar')
k = element('K')
ca = element('Ca')
sc = element('Sc')
ti = element('Ti')
v = element('V')
cr = element('Cr')
Any and all help related to this would be appreciated, however actual code examples pertaining to my code would be extremely helpful and greatly appreciated.