I hope you enjoy this bit of code.
I did!
Your symbols, keywords and values should have capitalised variable names since they're global constants. However, life would be easier if your symbols were integrated into your values, and keywords prepended with symbol. Even better: none of this actually belongs in your code, and should be cut out to a database file. JSON is easiest but there are others; for instance CSV would be higher-density (but has weaker typing).
You have not enough German in some parts, and too much German in others. Your localised data (e.g. Stickstoff) are fine. Schema (e.g. elementkategorie) and code (e.g. kategorie_farben) should not be localised and should be in English. Your floating-point rendering should use localised formats; in your case it will turn your decimal point into a comma.
Don't write n.A in your database; use None and convert that to a string on render.
Don't store root in the global namespace.
Don't leave **kwargs as a dictionary; instead make a simple @dataclass.
Don't over-abbreviate variables like BD which should be BORDER. Likewise, over-abbreviated tk keyword arguments like bg have a full-form background which should be used instead.
Rather than strings like e, prefer constants in tk like tk.E.
Your if c in ('La','Ac'): is redundant and can be deleted.
Your flag, <Enter> and <Leave> aren't doing anything so in my suggested code I deleted them.
Refactor your get_fg to be a dictionary lookup.
Prefer the "has-a" pattern over the "is-a" pattern for your element frame class; in other words, instantiate a frame instead of inheriting one.
Suggested
elements.json
[
{
"symbol": "H",
"name": "Wasserstoff",
"index": 1,
"category": "Nichtmetalle",
"group": 1,
"period": 1,
"block": "s",
"mass": 1.01,
"state": "gasförmig",
"density": 0.08,
"electronegativity": 2.2
},
{
"symbol": "He",
"name": "Helium",
"index": 2,
"category": "Edelgase",
"group": 18,
"period": 1,
"block": "s",
"mass": 4.0,
"state": "gasförmig",
"density": 0.18,
"electronegativity": null
},
{
"symbol": "Li",
"name": "Lithium",
"index": 3,
"category": "Alkalimetalle",
"group": 1,
"period": 2,
"block": "s",
"mass": 6.94,
"state": "fest",
"density": 0.53,
"electronegativity": 0.98
},
{
"symbol": "Be",
"name": "Beryllium",
"index": 4,
"category": "Erdalkalimetalle",
"group": 2,
"period": 2,
"block": "s",
"mass": 9.01,
"state": "fest",
"density": 1.84,
"electronegativity": 1.57
},
{
"symbol": "B",
"name": "Bor",
"index": 5,
"category": "Halbmetalle",
"group": 13,
"period": 2,
"block": "p",
"mass": 10.81,
"state": "fest",
"density": 2.46,
"electronegativity": 2.04
},
{
"symbol": "C",
"name": "Kohlenstoff",
"index": 6,
"category": "Nichtmetalle",
"group": 14,
"period": 2,
"block": "p",
"mass": 12.01,
"state": "fest",
"density": 2.26,
"electronegativity": 2.55
},
{
"symbol": "N",
"name": "Stickstoff",
"index": 7,
"category": "Nichtmetalle",
"group": 15,
"period": 2,
"block": "p",
"mass": 14.0,
"state": "gasförmig",
"density": 1.17,
"electronegativity": 3.04
},
{
"symbol": "O",
"name": "Sauerstoff",
"index": 8,
"category": "Nichtmetalle",
"group": 16,
"period": 2,
"block": "p",
"mass": 15.99,
"state": "gasförmig",
"density": 1.43,
"electronegativity": 3.44
},
{
"symbol": "F",
"name": "Fluor",
"index": 9,
"category": "Halogene",
"group": 17,
"period": 2,
"block": "p",
"mass": 18.99,
"state": "gasförmig",
"density": 1.7,
"electronegativity": 3.98
},
{
"symbol": "Ne",
"name": "Neon",
"index": 10,
"category": "Edelgase",
"group": 18,
"period": 2,
"block": "p",
"mass": 20.17,
"state": "gasförmig",
"density": 0.9,
"electronegativity": null
},
{
"symbol": "Na",
"name": "Natrium",
"index": 11,
"category": "Alkalimetalle",
"group": 1,
"period": 3,
"block": "s",
"mass": 22.99,
"state": "fest",
"density": 0.97,
"electronegativity": 0.93
},
{
"symbol": "Mg",
"name": "Magnesium",
"index": 12,
"category": "Erdalkalimetalle",
"group": 2,
"period": 3,
"block": "s",
"mass": 24.31,
"state": "fest",
"density": 1.74,
"electronegativity": 1.31
},
{
"symbol": "Al",
"name": "Aluminium",
"index": 13,
"category": "Metalle",
"group": 13,
"period": 3,
"block": "p",
"mass": 26.98,
"state": "fest",
"density": 2.69,
"electronegativity": 1.61
},
{
"symbol": "Si",
"name": "Silicium",
"index": 14,
"category": "Halbmetalle",
"group": 14,
"period": 3,
"block": "p",
"mass": 28.08,
"state": "fest",
"density": 2.34,
"electronegativity": 1.9
},
{
"symbol": "P",
"name": "Phosphor",
"index": 15,
"category": "Nichtmetalle",
"group": 15,
"period": 3,
"block": "p",
"mass": 30.97,
"state": "fest",
"density": 2.4,
"electronegativity": 2.19
},
{
"symbol": "S",
"name": "Schwefel",
"index": 16,
"category": "Nichtmetalle",
"group": 16,
"period": 3,
"block": "p",
"mass": 32.06,
"state": "fest",
"density": 2.07,
"electronegativity": 2.58
},
{
"symbol": "Cl",
"name": "Chlor",
"index": 17,
"category": "Halogene",
"group": 17,
"period": 3,
"block": "p",
"mass": 35.45,
"state": "gasförmig",
"density": 3.22,
"electronegativity": 3.16
},
{
"symbol": "Ar",
"name": "Argon",
"index": 18,
"category": "Edelgase",
"group": 18,
"period": 3,
"block": "p",
"mass": 39.95,
"state": "gasförmig",
"density": 1.78,
"electronegativity": null
},
{
"symbol": "K",
"name": "Kalium",
"index": 19,
"category": "Alkalimetalle",
"group": 1,
"period": 4,
"block": "s",
"mass": 39.09,
"state": "fest",
"density": 0.86,
"electronegativity": 0.82
},
{
"symbol": "Ca",
"name": "Calicium",
"index": 20,
"category": "Erdalkalimetalle",
"group": 2,
"period": 4,
"block": "s",
"mass": 40.08,
"state": "fest",
"density": 1.55,
"electronegativity": 1.0
},
{
"symbol": "Sc",
"name": "Scandium",
"index": 21,
"category": "Übergangsmetalle",
"group": 3,
"period": 4,
"block": "d",
"mass": 44.96,
"state": "fest",
"density": 2.99,
"electronegativity": 1.36
},
{
"symbol": "Ti",
"name": "Titan",
"index": 22,
"category": "Übergangsmetalle",
"group": 4,
"period": 4,
"block": "d",
"mass": 47.87,
"state": "fest",
"density": 4.5,
"electronegativity": 1.54
},
{
"symbol": "V",
"name": "Vandium",
"index": 23,
"category": "Übergangsmetalle",
"group": 5,
"period": 4,
"block": "d",
"mass": 50.94,
"state": "fest",
"density": 6.11,
"electronegativity": 1.63
},
{
"symbol": "Cr",
"name": "Chrom",
"index": 24,
"category": "Übergangsmetalle",
"group": 6,
"period": 4,
"block": "d",
"mass": 51.99,
"state": "fest",
"density": 7.14,
"electronegativity": 1.66
},
{
"symbol": "Mn",
"name": "Mangan",
"index": 25,
"category": "Übergangsmetalle",
"group": 7,
"period": 4,
"block": "d",
"mass": 54.94,
"state": "fest",
"density": 7.43,
"electronegativity": 1.55
},
{
"symbol": "Fe",
"name": "Eisen",
"index": 26,
"category": "Übergangsmetalle",
"group": 8,
"period": 4,
"block": "d",
"mass": 55.85,
"state": "fest",
"density": 7.87,
"electronegativity": 1.83
},
{
"symbol": "Co",
"name": "Cobalt",
"index": 27,
"category": "Übergangsmetalle",
"group": 9,
"period": 4,
"block": "d",
"mass": 58.93,
"state": "fest",
"density": 8.9,
"electronegativity": 1.88
},
{
"symbol": "Ni",
"name": "Nickel",
"index": 28,
"category": "Übergangsmetalle",
"group": 10,
"period": 4,
"block": "d",
"mass": 58.69,
"state": "fest",
"density": 8.9,
"electronegativity": 1.91
},
{
"symbol": "Cu",
"name": "Kupfer",
"index": 29,
"category": "Übergangsmetalle",
"group": 11,
"period": 4,
"block": "d",
"mass": 63.54,
"state": "fest",
"density": 8.92,
"electronegativity": 1.9
},
{
"symbol": "Zn",
"name": "Zink",
"index": 30,
"category": "Übergangsmetalle",
"group": 12,
"period": 4,
"block": "d",
"mass": 65.38,
"state": "fest",
"density": 7.14,
"electronegativity": 1.65
},
{
"symbol": "Ga",
"name": "Gallium",
"index": 31,
"category": "Metalle",
"group": 13,
"period": 4,
"block": "p",
"mass": 69.72,
"state": "fest",
"density": 5.9,
"electronegativity": 1.81
},
{
"symbol": "Ge",
"name": "Germanium",
"index": 32,
"category": "Halbmetalle",
"group": 14,
"period": 4,
"block": "p",
"mass": 72.63,
"state": "fest",
"density": 5.32,
"electronegativity": 2.01
},
{
"symbol": "As",
"name": "Arsen",
"index": 33,
"category": "Halbmetalle",
"group": 15,
"period": 4,
"block": "p",
"mass": 74.92,
"state": "fest",
"density": 5.73,
"electronegativity": 2.18
},
{
"symbol": "Se",
"name": "Selen",
"index": 34,
"category": "Halbmetalle",
"group": 16,
"period": 4,
"block": "p",
"mass": 78.97,
"state": "fest",
"density": 4.82,
"electronegativity": 2.55
},
{
"symbol": "Br",
"name": "Brom",
"index": 35,
"category": "Halogene",
"group": 17,
"period": 4,
"block": "p",
"mass": 79.9,
"state": "flüssig",
"density": 3.12,
"electronegativity": 2.96
},
{
"symbol": "Kr",
"name": "Krypton",
"index": 36,
"category": "Edelgase",
"group": 18,
"period": 4,
"block": "p",
"mass": 83.8,
"state": "gasförmig",
"density": 3.75,
"electronegativity": 3.0
},
{
"symbol": "Rb",
"name": "Rubidium",
"index": 37,
"category": "Alkalimetalle",
"group": 1,
"period": 5,
"block": "s",
"mass": 85.47,
"state": "fest",
"density": 1.53,
"electronegativity": 0.82
},
{
"symbol": "Sr",
"name": "Strontium",
"index": 38,
"category": "Erdalkalimetalle",
"group": 2,
"period": 5,
"block": "s",
"mass": 87.62,
"state": "fest",
"density": 2.63,
"electronegativity": 0.95
},
{
"symbol": "Y",
"name": "Yttrium",
"index": 39,
"category": "Übergangsmetalle",
"group": 3,
"period": 5,
"block": "d",
"mass": 88.91,
"state": "fest",
"density": 4.47,
"electronegativity": 1.22
},
{
"symbol": "Zr",
"name": "Zirconium",
"index": 40,
"category": "Übergangsmetalle",
"group": 4,
"period": 5,
"block": "d",
"mass": 91.22,
"state": "fest",
"density": 6.5,
"electronegativity": 1.33
},
{
"symbol": "Nb",
"name": "Niob",
"index": 41,
"category": "Übergangsmetalle",
"group": 5,
"period": 5,
"block": "d",
"mass": 92.9,
"state": "fest",
"density": 8.57,
"electronegativity": 1.6
},
{
"symbol": "Mo",
"name": "Molybdän",
"index": 42,
"category": "Übergangsmetalle",
"group": 6,
"period": 5,
"block": "d",
"mass": 95.95,
"state": "fest",
"density": 10.28,
"electronegativity": 2.16
},
{
"symbol": "Tc",
"name": "Technetium",
"index": 43,
"category": "Übergangsmetalle",
"group": 7,
"period": 5,
"block": "d",
"mass": 98.9,
"state": "fest",
"density": 11.5,
"electronegativity": 1.9
},
{
"symbol": "Ru",
"name": "Ruthenium",
"index": 44,
"category": "Übergangsmetalle",
"group": 8,
"period": 5,
"block": "d",
"mass": 101.07,
"state": "fest",
"density": 12.37,
"electronegativity": 2.2
},
{
"symbol": "Rh",
"name": "Rhodium",
"index": 45,
"category": "Übergangsmetalle",
"group": 9,
"period": 5,
"block": "d",
"mass": 102.9,
"state": "fest",
"density": 12.38,
"electronegativity": 2.28
},
{
"symbol": "Pd",
"name": "Palladium",
"index": 46,
"category": "Übergangsmetalle",
"group": 10,
"period": 5,
"block": "d",
"mass": 106.42,
"state": "fest",
"density": 11.99,
"electronegativity": 2.2
},
{
"symbol": "Ag",
"name": "Silber",
"index": 47,
"category": "Übergangsmetalle",
"group": 11,
"period": 5,
"block": "d",
"mass": 107.87,
"state": "fest",
"density": 10.49,
"electronegativity": 1.93
},
{
"symbol": "Cd",
"name": "cadmium",
"index": 48,
"category": "Übergangsmetalle",
"group": 12,
"period": 5,
"block": "d",
"mass": 112.41,
"state": "fest",
"density": 8.65,
"electronegativity": 1.69
},
{
"symbol": "In",
"name": "Indium",
"index": 49,
"category": "Metalle",
"group": 13,
"period": 5,
"block": "p",
"mass": 114.82,
"state": "fest",
"density": 7.31,
"electronegativity": 1.78
},
{
"symbol": "Sn",
"name": "Zinn",
"index": 50,
"category": "Metalle",
"group": 14,
"period": 5,
"block": "p",
"mass": 118.71,
"state": "fest",
"density": 5.77,
"electronegativity": 1.96
},
{
"symbol": "Sb",
"name": "Antimon",
"index": 51,
"category": "Halbmetalle",
"group": 15,
"period": 5,
"block": "p",
"mass": 121.76,
"state": "fest",
"density": 6.7,
"electronegativity": 2.05
},
{
"symbol": "Te",
"name": "Tellur",
"index": 52,
"category": "Halbmetalle",
"group": 16,
"period": 5,
"block": "p",
"mass": 127.6,
"state": "fest",
"density": 6.24,
"electronegativity": 2.1
},
{
"symbol": "I",
"name": "Iod",
"index": 53,
"category": "Halogene",
"group": 17,
"period": 5,
"block": "p",
"mass": 126.9,
"state": "fest",
"density": 4.94,
"electronegativity": 2.66
},
{
"symbol": "Xe",
"name": "Xenon",
"index": 54,
"category": "Edelgase",
"group": 18,
"period": 5,
"block": "p",
"mass": 131.29,
"state": "gasförmig",
"density": 5.9,
"electronegativity": 2.6
},
{
"symbol": "Cs",
"name": "Caesium",
"index": 55,
"category": "Alkalimetalle",
"group": 1,
"period": 6,
"block": "s",
"mass": 132.91,
"state": "fest",
"density": 1.9,
"electronegativity": 0.79
},
{
"symbol": "Ba",
"name": "Barium",
"index": 56,
"category": "Erdalkalimetalle",
"group": 2,
"period": 6,
"block": "s",
"mass": 137.33,
"state": "fest",
"density": 3.62,
"electronegativity": 0.89
},
{
"symbol": "La",
"name": "Lanthan",
"index": 57,
"category": "Übergangsmetalle",
"group": 3,
"period": 6,
"block": "d",
"mass": 138.9,
"state": "fest",
"density": 6.17,
"electronegativity": 1.1
},
{
"symbol": "Ce",
"name": "Cer",
"index": 58,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 140.12,
"state": "fest",
"density": 6.77,
"electronegativity": 1.12
},
{
"symbol": "Pr",
"name": "Praseodym",
"index": 59,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 140.91,
"state": "fest",
"density": 6.48,
"electronegativity": 1.13
},
{
"symbol": "Nd",
"name": "Neodym",
"index": 60,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 144.24,
"state": "fest",
"density": 7.0,
"electronegativity": 1.14
},
{
"symbol": "Pm",
"name": "Promethium",
"index": 61,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 146.91,
"state": "fest",
"density": 7.2,
"electronegativity": null
},
{
"symbol": "Sm",
"name": "Samarium",
"index": 62,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 150.36,
"state": "fest",
"density": 7.54,
"electronegativity": 1.17
},
{
"symbol": "Eu",
"name": "Europium",
"index": 63,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 151.96,
"state": "fest",
"density": 5.25,
"electronegativity": null
},
{
"symbol": "Gd",
"name": "Gadolinium",
"index": 64,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 157.25,
"state": "fest",
"density": 7.89,
"electronegativity": 1.2
},
{
"symbol": "Tb",
"name": "Terbium",
"index": 65,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 158.93,
"state": "fest",
"density": 8.25,
"electronegativity": null
},
{
"symbol": "Dy",
"name": "Dysprosium",
"index": 66,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 162.5,
"state": "fest",
"density": 8.56,
"electronegativity": 1.22
},
{
"symbol": "Ho",
"name": "Holmium",
"index": 67,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 164.93,
"state": "fest",
"density": 8.78,
"electronegativity": 1.23
},
{
"symbol": "Er",
"name": "Erbium",
"index": 68,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 167.26,
"state": "fest",
"density": 9.05,
"electronegativity": 1.24
},
{
"symbol": "Tm",
"name": "Thulium",
"index": 69,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 168.93,
"state": "fest",
"density": 9.32,
"electronegativity": 1.25
},
{
"symbol": "Yb",
"name": "Ytterbium",
"index": 70,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 173.05,
"state": "fest",
"density": 6.97,
"electronegativity": null
},
{
"symbol": "Lu",
"name": "Lutetium",
"index": 71,
"category": "Lanthanoide",
"group": "La",
"period": 6,
"block": "f",
"mass": 174.97,
"state": "fest",
"density": 9.84,
"electronegativity": 1.27
},
{
"symbol": "Hf",
"name": "Hafnium",
"index": 72,
"category": "Übergangsmetalle",
"group": 4,
"period": 6,
"block": "d",
"mass": 178.49,
"state": "fest",
"density": 13.28,
"electronegativity": 1.3
},
{
"symbol": "Ta",
"name": "Tantal",
"index": 73,
"category": "Übergangsmetalle",
"group": 5,
"period": 6,
"block": "d",
"mass": 180.95,
"state": "fest",
"density": 16.65,
"electronegativity": 1.5
},
{
"symbol": "W",
"name": "Wolfram",
"index": 74,
"category": "Übergangsmetalle",
"group": 6,
"period": 6,
"block": "d",
"mass": 183.84,
"state": "fest",
"density": 19.25,
"electronegativity": 2.36
},
{
"symbol": "Re",
"name": "Rhenium",
"index": 75,
"category": "Übergangsmetalle",
"group": 7,
"period": 6,
"block": "d",
"mass": 186.21,
"state": "fest",
"density": 21.0,
"electronegativity": 1.9
},
{
"symbol": "Os",
"name": "Osmium",
"index": 76,
"category": "Übergangsmetalle",
"group": 8,
"period": 6,
"block": "d",
"mass": 190.23,
"state": "fest",
"density": 22.59,
"electronegativity": 2.2
},
{
"symbol": "Ir",
"name": "Irdium",
"index": 77,
"category": "Übergangsmetalle",
"group": 9,
"period": 6,
"block": "d",
"mass": 192.22,
"state": "fest",
"density": 22.56,
"electronegativity": 2.2
},
{
"symbol": "Pt",
"name": "Platin",
"index": 78,
"category": "Übergangsmetalle",
"group": 10,
"period": 6,
"block": "d",
"mass": 195.08,
"state": "fest",
"density": 21.45,
"electronegativity": 2.2
},
{
"symbol": "Au",
"name": "Gold",
"index": 79,
"category": "Übergangsmetalle",
"group": 11,
"period": 6,
"block": "d",
"mass": 196.97,
"state": "fest",
"density": 19.32,
"electronegativity": 2.54
},
{
"symbol": "Hg",
"name": "Quecksilber",
"index": 80,
"category": "Übergangsmetalle",
"group": 12,
"period": 6,
"block": "d",
"mass": 200.59,
"state": "flüssig",
"density": 13.55,
"electronegativity": 2.0
},
{
"symbol": "Tl",
"name": "Thalium",
"index": 81,
"category": "Metalle",
"group": 13,
"period": 6,
"block": "p",
"mass": 204.38,
"state": "fest",
"density": 11.85,
"electronegativity": 1.62
},
{
"symbol": "Pb",
"name": "Blei",
"index": 82,
"category": "Metalle",
"group": 14,
"period": 6,
"block": "p",
"mass": 207.2,
"state": "fest",
"density": 11.34,
"electronegativity": 2.33
},
{
"symbol": "Bi",
"name": "Bismut",
"index": 83,
"category": "Metalle",
"group": 15,
"period": 6,
"block": "p",
"mass": 208.98,
"state": "fest",
"density": 9.78,
"electronegativity": 2.02
},
{
"symbol": "Po",
"name": "Polonium",
"index": 84,
"category": "Metalle",
"group": 16,
"period": 6,
"block": "p",
"mass": 209.98,
"state": "fest",
"density": 9.2,
"electronegativity": 2.0
},
{
"symbol": "At",
"name": "Astat",
"index": 85,
"category": "Halogene",
"group": 17,
"period": 6,
"block": "p",
"mass": 209.99,
"state": "fest",
"density": null,
"electronegativity": 2.2
},
{
"symbol": "Rn",
"name": "Radon",
"index": 86,
"category": "Edelgase",
"group": 18,
"period": 6,
"block": "p",
"mass": 222.0,
"state": "gasförmig",
"density": 9.73,
"electronegativity": null
},
{
"symbol": "Fr",
"name": "Francium",
"index": 87,
"category": "Alkalimetalle",
"group": 1,
"period": 7,
"block": "s",
"mass": 223.02,
"state": "fest",
"density": null,
"electronegativity": 0.7
},
{
"symbol": "Ra",
"name": "Radium",
"index": 88,
"category": "Erdalkalimetalle",
"group": 2,
"period": 7,
"block": "s",
"mass": 226.03,
"state": "fest",
"density": 5.5,
"electronegativity": 0.9
},
{
"symbol": "Ac",
"name": "Actinium",
"index": 89,
"category": "Übergangsmetalle",
"group": 3,
"period": 7,
"block": "d",
"mass": 227.03,
"state": "fest",
"density": 10.07,
"electronegativity": 1.1
},
{
"symbol": "Th",
"name": "Thorium",
"index": 90,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 232.04,
"state": "fest",
"density": 11.72,
"electronegativity": 1.3
},
{
"symbol": "Pa",
"name": "Protactinium",
"index": 91,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 231.04,
"state": "fest",
"density": 15.37,
"electronegativity": 1.5
},
{
"symbol": "U",
"name": "Uran",
"index": 92,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 238.03,
"state": "fest",
"density": 19.16,
"electronegativity": 1.38
},
{
"symbol": "Np",
"name": "Neptunium",
"index": 93,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 237.05,
"state": "fest",
"density": 20.45,
"electronegativity": 1.36
},
{
"symbol": "Pu",
"name": "Plutonium",
"index": 94,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 244.06,
"state": "fest",
"density": 19.82,
"electronegativity": 1.28
},
{
"symbol": "Am",
"name": "Americium",
"index": 95,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 243.06,
"state": "fest",
"density": 13.67,
"electronegativity": 1.3
},
{
"symbol": "Cm",
"name": "Curium",
"index": 96,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 247.07,
"state": "fest",
"density": 13.51,
"electronegativity": 1.3
},
{
"symbol": "Bk",
"name": "Berkelium",
"index": 97,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 247,
"state": "fest",
"density": 14.78,
"electronegativity": 1.3
},
{
"symbol": "Cf",
"name": "Californium",
"index": 98,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 251,
"state": "fest",
"density": 15.1,
"electronegativity": 1.3
},
{
"symbol": "Es",
"name": "Einsteinium",
"index": 99,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 252,
"state": "fest",
"density": 8.84,
"electronegativity": null
},
{
"symbol": "Fm",
"name": "Fermium",
"index": 100,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 257.1,
"state": "fest",
"density": null,
"electronegativity": null
},
{
"symbol": "Md",
"name": "Medelevium",
"index": 101,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 258,
"state": "fest",
"density": null,
"electronegativity": null
},
{
"symbol": "No",
"name": "Nobelium",
"index": 102,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 259,
"state": "fest",
"density": null,
"electronegativity": null
},
{
"symbol": "Lr",
"name": "Lawrencium",
"index": 103,
"category": "Actinoide",
"group": "Ac",
"period": 7,
"block": "f",
"mass": 266,
"state": "fest",
"density": null,
"electronegativity": null
},
{
"symbol": "Rf",
"name": "Rutherdordium",
"index": 104,
"category": "Übergangsmetalle",
"group": 4,
"period": 7,
"block": "d",
"mass": 261.11,
"state": "fest",
"density": 17.0,
"electronegativity": null
},
{
"symbol": "Db",
"name": "Dubnium",
"index": 105,
"category": "Übergangsmetalle",
"group": 5,
"period": 7,
"block": "d",
"mass": 262.11,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Sg",
"name": "Seaborgium",
"index": 106,
"category": "Übergangsmetalle",
"group": 6,
"period": 7,
"block": "d",
"mass": 263.12,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Bh",
"name": "Bohrium",
"index": 107,
"category": "Übergangsmetalle",
"group": 7,
"period": 7,
"block": "d",
"mass": 262.12,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Hs",
"name": "Hassium",
"index": 108,
"category": "Übergangsmetalle",
"group": 8,
"period": 7,
"block": "d",
"mass": 265,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Mt",
"name": "Meitnerium",
"index": 109,
"category": "Unbekannt",
"group": 9,
"period": 7,
"block": "d",
"mass": 268,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Ds",
"name": "Darmstadtium",
"index": 110,
"category": "Unbekannt",
"group": 10,
"period": 7,
"block": "d",
"mass": 281,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Rg",
"name": "Roentgenium",
"index": 111,
"category": "Unbekannt",
"group": 11,
"period": 7,
"block": "d",
"mass": 280,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Cn",
"name": "Copernicium",
"index": 112,
"category": "Unbekannt",
"group": 12,
"period": 7,
"block": "d",
"mass": 277,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Nh",
"name": "Nihonium",
"index": 113,
"category": "Unbekannt",
"group": 13,
"period": 7,
"block": "p",
"mass": 287,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Fl",
"name": "Flerovium",
"index": 114,
"category": "Unbekannt",
"group": 14,
"period": 7,
"block": "p",
"mass": 289,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Mc",
"name": "Moscovium",
"index": 115,
"category": "Unbekannt",
"group": 15,
"period": 7,
"block": "p",
"mass": 288,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Lv",
"name": "Livermorium",
"index": 116,
"category": "Unbekannt",
"group": 16,
"period": 7,
"block": "p",
"mass": 293,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Ts",
"name": "Tenness",
"index": 117,
"category": "Unbekannt",
"group": 17,
"period": 7,
"block": "p",
"mass": 292,
"state": null,
"density": null,
"electronegativity": null
},
{
"symbol": "Og",
"name": "Oganesson",
"index": 118,
"category": "Unbekannt",
"group": 18,
"period": 7,
"block": "p",
"mass": 294,
"state": "fest",
"density": 6.6,
"electronegativity": null
}
]
Python
import json
import tkinter as tk
from dataclasses import dataclass
from locale import setlocale, LC_ALL, format_string
from typing import Optional
@dataclass
class Element:
symbol: str
name: str
index: int
category: str
group: int
period: int
block: str
mass: float
state: Optional[str]
density: Optional[float]
electronegativity: Optional[float]
def format_float(s: Optional[float]) -> str:
if s is None:
return 'n.A'
return format_string('%.2f', s)
class ElementFrame:
la_offset = 2
ac_offset = 2
OFFSET = 2
WIDTH, HEIGHT, BORDER = 100, 100, 3
CMP = BORDER * 2
CATEGORY_COLORS = {
'Alkalimetalle': '#fe6f61',
'Erdalkalimetalle': '#6791a7',
'Übergangsmetalle': '#83b8d0',
'Metalle': '#cae2ed',
'Halbmetalle': '#a7d6bc',
'Nichtmetalle': '#ffde66',
'Halogene': '#e9aa63',
'Edelgase': '#e29136',
'Unbekannt': '#cec0bf',
'Lanthanoide': '#696071',
'Actinoide': '#5b4c68',
}
STATE_COLORS = {
'fest': 'black',
'flüssig': 'blue',
'gasförmig': 'red',
None: 'grey',
}
def __init__(self, parent: tk.Tk, element: Element) -> None:
self.frame = frame = tk.Frame(parent, relief=tk.RAISED)
background = self.CATEGORY_COLORS[element.category]
frame.configure(width=self.WIDTH, height=self.HEIGHT, borderwidth=self.BORDER, background=background)
frame.grid_propagate(0)
self.index = tk.Label(frame, text=element.index, background=background)
self.mass = tk.Label(frame, text=format_float(element.mass), background=background)
self.name = tk.Label(frame, text=element.name, background=background)
self.symbol = tk.Label(
frame, text=element.symbol, font='bold',
foreground=self.STATE_COLORS[element.state], background=background)
self.electronegativity = tk.Label(
frame, text=format_float(element.electronegativity), background=background)
self.density = tk.Label(frame, text=format_float(element.density), background=background)
frame.grid_columnconfigure(1, weight=2)
frame.grid_rowconfigure(1, weight=2)
self.index.grid(row=0, column=0, sticky=tk.W)
self.mass.grid(row=0, column=2, sticky=tk.E)
mid_x = (self.WIDTH - self.name.winfo_reqwidth()) / 2
mid_y = (self.HEIGHT - self.name.winfo_reqheight()) / 2
offset = 15
self.name.place(in_=frame, x=mid_x - self.CMP, y=mid_y - self.CMP + offset)
mid_x = (self.WIDTH - self.symbol.winfo_reqwidth()) / 2
mid_y = (self.HEIGHT - self.symbol.winfo_reqheight()) / 2
self.symbol.place(in_=frame, x=mid_x - self.CMP, y=mid_y - self.CMP - offset / 2)
self.electronegativity.grid(row=2, column=0, sticky=tk.W)
self.density.grid(row=2, column=2, sticky=tk.E)
period, group_name = element.period, element.group
if group_name == 'La':
group = ElementFrame.la_offset + ElementFrame.OFFSET
ElementFrame.la_offset += 1
period += ElementFrame.OFFSET
elif group_name == 'Ac':
group = ElementFrame.ac_offset + ElementFrame.OFFSET
ElementFrame.ac_offset += 1
period += ElementFrame.OFFSET
else:
group = group_name
frame.grid(row=period, column=group, sticky=tk.NSEW)
for widget in (frame, *frame.winfo_children()):
widget.bind('<ButtonPress-1>', self.press)
widget.bind('<ButtonRelease-1>', self.release)
def press(self, event: tk.Event) -> None:
self.frame.configure(relief='sunken')
def release(self, event: tk.Event) -> None:
self.frame.configure(relief='raised')
def main() -> None:
setlocale(LC_ALL, 'de-DE.UTF-8')
root = tk.Tk()
with open('elements.json', encoding='utf-8') as f:
elements = json.load(f)
for element_data in elements:
element = Element(**element_data)
ElementFrame(root, element)
root.mainloop()
if __name__ == '__main__':
main()