Problem mit window.bind("<key>", function)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

So weit, so gut...

Ich bin gerade an den Bindings für die Tasten... Jetzt ist das Problem, dass nur die Tastaturtasten 0, 9, 8, 7, 6 funktionieren und immer wenn ich manuell mit der Maus (irgend)einen Button drücke, wird dem "result_text" eine "1" beim drücken des Buttons hinzugefügt und dann beim loslassen des Buttons der jeweilige gedrückte Button... Aber NUR solange "fenster.bind("<1>", add_one)" existiert... ist diese Zeile draußen passiert das mit der "1" nicht mehr.. (1-5 über die Tastatur funktionieren aber immer noch nicht.. bei der "1" isses klar, aber beim Rest nicht...)

Einfach mal selber ausführen um das Problem zu sehen...

Bitte keine Belehrungen wie man richtig Codet, wie man importiert oder dergleichen... Muss ich leider dazu sagen, weil egal was ich frage immer solche antworten kommen, die das Problem aber nicht lösen...

Code: Alles auswählen

from tkinter import *
#from decimal import *
from traceback import *

fenster = Tk()
fenster.title("Taschenrechner")
fenster.geometry("400x500")

result = 0
result_text = StringVar()
result_button = ""
result_text.set("")

nums = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "-"]

def calculate(result_list):
    if result_button["text"][:1] == u"\u221a":
        try:
            a = float(result_button["text"][1:])
            if (a ** (.5)) % 1 != 0:
                result_text.set(str(a ** (.5)))
            else:
                result_text.set(str(int(a ** (.5))))
        except:
            result_text.set("ERROR")   
    elif result_list[1] == "+":
        try:
            a = float(result_list[0])
            b = float(result_list[2])
            if (a + b) % 1 == 0:
                result_text.set(str(int(a + b)))
            elif (a + b) % 1 != 0:
                result_text.set(str(a + b))
        except:
            result_text.set("ERROR")        
    elif result_list[1] == "-":
        try:
            a = float(result_list[0])
            b = float(result_list[2])
            if (a - b) % 1 == 0:
                result_text.set(str(int(a - b)))
            elif (a - b) % 1 != 0:
                result_text.set(str(a - b))
        except:
            result_text.set("ERROR")
    elif result_list[1] == "x":
        try:
            a = float(result_list[0])
            b = float(result_list[2])
            if (a * b) % 1 == 0:
                result_text.set(str(int(a * b)))
            elif (a * b) % 1 != 0:
                result_text.set(str(a * b))
        except:
            result_text.set("ERROR")
    elif result_list[1] == "/":
        try:
            a = float(result_list[0])
            b = float(result_list[2])
            if (a / b) % 1 == 0:
                result_text.set(str(int(a / b)))
            elif (a / b) % 1 != 0:
                result_text.set(str(a / b))
        except:
            result_text.set("ERROR")
    elif result_list[1] == "^":
        try:
            a = float(result_list[0])
            b = float(result_list[2])
            if (a ** b) % 1 == 0:
                result_text.set(str(int(a ** b)))
            elif (a ** b) % 1 != 0:
                result_text.set(str(a ** b))
        except:
            result_text.set("ERROR")
#    elif result_list[1] == "+":
#        result_text.set(str(int(result_list[0]) + int(result_list[2])))
#    elif result_list[1] == "+":
#        result_text.set(str(int(result_list[0]) + int(result_list[2])))

def kopieren():
    clip = Tk()
    clip.withdraw()
    clip.clipboard_clear()
    clip.clipboard_append(result_button["text"])  #Change INFO_TO_COPY to the name of your data source
    clip.destroy()

def add_zero(event="<0>"):
    result_text.set(result_button["text"] + "0")
def add_one(event="<1>"):
    result_text.set(result_button["text"] + "1")
def add_two(event="<2>"):
    result_text.set(result_button["text"] + "2")
def add_three(event="<3>"):
    result_text.set(result_button["text"] + "3")
def add_four(event="<4>"):
    result_text.set(result_button["text"] + "4")
def add_five(event="<5>"):
    result_text.set(result_button["text"] + "5")
def add_six(event="<6>"):
    result_text.set(result_button["text"] + "6")
def add_seven(event="<7>"):
    result_text.set(result_button["text"] + "7")
def add_eight(event="<8>"):
    result_text.set(result_button["text"] + "8")
def add_nine(event="<9>"):
    result_text.set(result_button["text"] + "9")
def add_comma():
    result_text.set(result_button["text"] + ".")
def add_squareroot():
    if result_button["text"][:1] != u"\u221a":
        result_text.set(u"\u221a" + result_button["text"])
    else:
        result_text.set(result_button["text"][1:])
def add_plus():
    result_text.set(result_button["text"] + " + ")
def add_minus():
    result_text.set(result_button["text"] + " - ")
def add_times():
    result_text.set(result_button["text"] + " x ")
def add_division():
    result_text.set(result_button["text"] + " / ")
def add_negative():
    result_text.set(result_button["text"] + "-")
def add_power():
    result_text.set(result_button["text"] + " ^ ")

def delete_last():
    if str(result_button["text"])[-1:] in nums:
        result_text.set(result_button["text"][:-1])
    elif str(result_button["text"]) == "ERROR":
        result_text.set(result_button["text"][:-5])        
    else:
        result_text.set(result_button["text"][:-3])

def clear():
    result_text.set("")

def pre_calculate():
    a = result_button["text"].split()
    calculate(a)

# Button definitionen
button_zero = Button(text="0", font=('Arial', '25', "bold"), command=add_zero)
button_one = Button(text="1", font=('Arial', '25', "bold"), command=add_one)
button_two = Button(text="2", font=('Arial', '25', "bold"), command=add_two)
button_three = Button(text="3", font=('Arial', '25', "bold"), command=add_three)
button_four = Button(text="4", font=('Arial', '25', "bold"), command=add_four)
button_five = Button(text="5", font=('Arial', '25', "bold"), command=add_five)
button_six = Button(text="6", font=('Arial', '25', "bold"), command=add_six)
button_seven = Button(text="7", font=('Arial', '25', "bold"), command=add_seven)
button_eight = Button(text="8", font=('Arial', '25', "bold"), command=add_eight)
button_nine = Button(text="9", font=('Arial', '25', "bold"), command=add_nine)
button_comma = Button(text=",", font=('Arial', '25', "bold"), command=add_comma)
button_plus = Button(text="+", font=('Arial', '25', "bold"), command=add_plus)
button_minus = Button(text="-", font=('Arial', '25', "bold"), command=add_minus)
button_times = Button(text="x", font=('Arial', '25', "bold"), command=add_times)
button_division = Button(text="/", font=('Arial', '25', "bold"), command=add_division)
button_negative = Button(text="+/-", font=('Arial', '25', "bold"), command=add_negative)
button_power = Button(text="^", font=('Arial', '25', "bold"), command=add_power)
button_squareroot = Button(text=u"\u221a", font=('Arial', '25', "bold"), command=add_squareroot)
button_result = Button(text="=", font=('Arial', '25', "bold"), command=pre_calculate)
result_button = Button(textvariable=result_text, font=('Arial', '15', "bold"), command=kopieren)
result_screen = Entry(fenster, bd=10, width=500, font=("Arial", "24"))
delete_button = Button(text="del", font=('Arial', '25', "bold"), command=delete_last)
clear_button = Button(text="clear", font=('Arial', '25', "bold"), command=clear)

# Keybindings
fenster.bind("<0>", add_zero)
fenster.bind("<1>", add_one)
fenster.bind("<2>", add_two)
fenster.bind("<3>", add_three)
fenster.bind("<4>", add_four)
fenster.bind("<5>", add_five)
fenster.bind("<6>", add_six)
fenster.bind("<7>", add_seven)
fenster.bind("<8>", add_eight)
fenster.bind("<9>", add_nine)

# Result Placement
result_button.place(relx=0.2505, rely=0, relwidth=0.50, relheight=0.1)
button_zero.place(relx=0.2505, rely=0.7005, relwidth=0.25, relheight=0.2)
button_one.place(relx=0.0005, rely=0.1, relwidth=0.25, relheight=0.2)
button_two.place(relx=0.2505, rely=0.1, relwidth=0.25, relheight=0.2)
button_three.place(relx=0.5005, rely=0.1, relwidth=0.25, relheight=0.2)
button_four.place(relx=0.0005, rely=0.3005, relwidth=0.25, relheight=0.2)
button_five.place(relx=0.2505, rely=0.3005, relwidth=0.25, relheight=0.2)
button_six.place(relx=0.5005, rely=0.3005, relwidth=0.25, relheight=0.2)
button_seven.place(relx=0.0005, rely=0.5005, relwidth=0.25, relheight=0.2)
button_eight.place(relx=0.2505, rely=0.5005, relwidth=0.25, relheight=0.2)
button_nine.place(relx=0.5005, rely=0.5005, relwidth=0.25, relheight=0.2)
button_comma.place(relx=0.5005, rely=0.7005, relwidth=0.25, relheight=0.2)
button_plus.place(relx=0.7505, rely=0.1, relwidth=0.25, relheight=0.2)
button_minus.place(relx=0.7505, rely=0.3005, relwidth=0.25, relheight=0.2)
button_times.place(relx=0.7505, rely=0.5005, relwidth=0.25, relheight=0.2)
button_division.place(relx=0.7505, rely=0.7005, relwidth=0.25, relheight=0.2)
button_negative.place(relx=0.0005, rely=0.7005, relwidth=0.25, relheight=0.2)
button_power.place(relx=0.0005, rely=0.9005, relwidth=0.25, relheight=0.1)
button_squareroot.place(relx=0.7505, rely=0.9005, relwidth=0.25, relheight=0.1)
button_result.place(relx=0.2505, rely=0.9005, relwidth=0.50, relheight=0.1)
delete_button.place(relx=0.75005, rely=0, relwidth=0.25, relheight=0.1)
clear_button.place(relx=0, rely=0, relwidth=0.25, relheight=0.1)

fenster.mainloop()
Antworten