Hallo Dennis,
danke für deine ausführliche Antwort.
Zunächst ein kurzer Zwischenstand.
ich muss , glaube ich, etwas ausholen.
Das mit der main-Funktion kannte ich nocht nicht.
ich bin parallel den Lehrgang "python lernen" noch nicht so weit.
ich habe mein Programm aber entsprechend angepasst.
Die Kommentar habe ich entfernt
ich habe das richtige Programm mal angehängt.
Zum Programm:
Es soll ein Taschenrechner werden.
Das Tastenfeld soll variable sein. Deswegen eine 2D-Liste.
Die Tasten sollen verschiedene Größen haben. (gleiche Namen nebeneinander)
Die Eingabe soll per Tastatur oder Tastenfeld auf der Userform erfolgen.
Wenn ein Operation eingegeben wird, soll die taste eingefärbt werden.
Deswegen hatte ich die Frage einen Button per Beschriftung anzusprechen.
Bei meinem Programm bin ich nun soweit, dass das Tastenfeld aufgebaut wird.
Es sind auch nur Eingaben per Tatatur möglich, die in der 2D-Liste aufegführt sind.
ich hoffe das Programm ist nicht allzu schlecht programiert.
ich werde morgen weiter machen.
Code: Alles auswählen
# --------------------------------------------------------------------------------
# Taschenrechner V1.0
import tkinter as tk
from functools import partial
beschriftung = {"Escape": "ESC",
"slash": "/",
"asterisk": "*",
"minus": "-",
"plus": "+",
"Return": "=",
"comma": ","}
# zwei Tastenfelder zur Auswahl
tastenfeld1 = [["Escape","/","*","-"],
["7","8","9","+"],
["4","5","6","+"],
["1","2","3","="],
["0","0",",","="]]
tastenfeld2 = [["ESC","ESC","*","-"],
["ESC","ESC","9","+"],
["","5","6","+"],
["1","2","3","="],
["0","0",",","="]]
tastenfeld = tastenfeld2
rand = 10
abstand = 5
groesse = 50
schriftgroesse = groesse /2
anzahl_x = len(tastenfeld[0])
anzahl_y = len(tastenfeld)
def tastenauswertung(name, taste):
print("Eingabe", name)
def key_handler(event):
try: #test = tastenfeld[0].index(event.keysym)
eingabe = beschriftung[event.keysym]
except:
eingabe = event.keysym
liste = []
for i in range(anzahl_y):
for j in range(anzahl_x):
liste.append(tastenfeld[i][j])
try:
index = liste.index(eingabe)
tastenauswertung(eingabe, "")
except:
index = ""
def main():
# Userform erstellen
root = tk.Tk()
root.title("Testprogramm")
uform_x = (2*rand)+(anzahl_x*groesse)+((anzahl_x-1)*abstand)
uform_y = (3*rand)+groesse+(anzahl_y*groesse)+((anzahl_y-1)*abstand)
root.minsize(uform_x, uform_y)
root.maxsize(uform_x, uform_y)
root.geometry(str(uform_x) + "x" + str(uform_y))
# Eingabefeld erstellen
breite = (anzahl_x*groesse)+((anzahl_x-1)*abstand)
hoehe = groesse
eingabefeld = tk.Entry(root)
eingabefeld_wert = tk.StringVar()
eingabefeld["textvariable"] = eingabefeld_wert
eingabefeld["justify"] = tk.RIGHT
eingabefeld["font"] = schriftgroesse
eingabefeld["state"] = "disabled"
eingabefeld_wert.set("0")
eingabefeld.place(x=rand, y=rand, width=breite, height=hoehe)
# tastenfeld erstellen
tastenverarbeitung = [[0 for x in range(anzahl_x)]for y in range(anzahl_y)]
for lv_y in range(anzahl_y):
for lv_x in range(anzahl_x):
if tastenverarbeitung[lv_y][lv_x] == 0:
#print(tastenverarbeitung)
name = tastenfeld[lv_y][lv_x]
if name !="":
groesse_x = 0
dx = 0
for dx in range(anzahl_x):
vergleich = tastenfeld[lv_y][dx]
if name == vergleich:
groesse_x +=1
else:
continue
groesse_y = 0
dy = 0
for dy in range(anzahl_y):
vergleich = tastenfeld[dy][lv_x]
if name == vergleich:
groesse_y +=1
else:
continue
for i in range(groesse_y):
for j in range(groesse_x):
tastenverarbeitung[lv_y+i][lv_x+j] = 1
x_pos = rand+(lv_x*groesse)+(lv_x*abstand)
y_pos = (2*rand+groesse)+(lv_y*groesse)+(lv_y*abstand)
breite = (groesse_x*groesse)+((groesse_x-1)*abstand)
hoehe = (groesse_y*groesse)+((groesse_y-1)*abstand)
taste = tk.Button(root)
taste["text"] = name
taste["command"] = partial(tastenauswertung, name, taste)
taste["font"] = schriftgroesse
taste.place(x=x_pos, y=y_pos, width=breite, height=hoehe)
root.bind("<Key>", key_handler)
root.mainloop()
if __name__ == "__main__":
main()