0

Ich arbeite an einem Taschenrechner und ich will es so, sobald der Benutzer die Eingabe der ersten Nummer abgeschlossen ist und wählt einen Operator (+ - */etc.) sie können eine zweite Nummer eingeben und dann drücken Sie eine Gleichheits-Taste, um ihre Antwort zu erhalten .Was wäre der beste Weg, um meine boolean mit Tkinter-Schaltflächen zu aktualisieren?

Momentan kann ich meinem Bool innerhalb meines def s keinen Wert zuweisen, was mich davon abhält, eine zweite Nummer einzugeben und eventuell Funktionen auszuführen. Die letzte Zeile von commandButtonPress() ist, wo die Dinge rutschen auf und vor der Herstellung whichNum ein list Ich war immer:

Variable vor der Zuweisung referenziert

Ich habe versucht, sowohl direkte Zuordnung als auch mit remove() und append(). Die Tasten 1-9 verwenden den gleichen Codeblock, und ich habe die Dezimalzahl nicht berücksichtigt, weil ich nicht gedacht habe, dass dies zur Lösung dieses Problems notwendig wäre.

Ich weiß nichts davon ist elegant und das meiste wäre viel besser, wenn ich eine Klasse implementieren würde, aber ich bin neu und versuche, die Dinge herauszufinden und habe noch keine objektorientierte Programmierung in Python gemacht.

from tkinter import * 
def buttonOne(whichNum): 
    count = 0 
    number = "" 
    try: 
     if whichNum == False and num1[0] != "0": 
      num1.append("1") 
      while count < len(num1): 
       number = number + str(num1[count]) 
       count += 1 
      screen["text"] = number 
     elif whichNum == True and num2[0] != "0": 
      num2.append("1") 
      while count < len(num2): 
       number = number + str(num2[count]) 
       count += 1 
      screen["text"] = number 
    except: 
     if whichNum == False: 
      num1[0] = "." 
     else: 
      num2[0] = "." 
     number = "0." 
     screen["text"] = number 
def commandButtonPress(symbol, whichNum): 
    if whichNum == False: 
     if len(operator) > 0 and operator[0] == "+": 
      operator.remove("+") 
    if len(num1) > 0: 
     operator.append(symbol) 
     whichNum[0] = True 
def main(): 
    window = Tk() 
    window.title("Calculator") 
    window.geometry("250x305") 
    num1 = [] 
    num2 = [] 
    operator = [] 
    whichNum = [False] 

    global screen 
    screen = Label(text="0", height = 5, width = 30) 
    screen.pack(side = LEFT, expand=False, anchor = N, padx=[5, 5]) 

    button1 = Button(text="1", command = lambda: buttonOne(whichNum[0])) 
    button1.grid(column=0, row=2) 
    button11 = Button(text="+", command = lambda: commandButtonPress("+", whichNum[0])) 
    button11.grid(column=3, row=2) 
    window.mainloop() 

main() 
+0

Bitte [erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve). Wie es ist, entmutigen Sie Menschen, Ihnen zu helfen, da Ihre Frage viel einfacher gestellt werden kann. – Nae

+0

Versuchen Sie, 'whichNum = None' außerhalb aller Funktionen zu definieren und fügen Sie' global whichNum' allen Funktionen als erste Zeile hinzu. – Nae

+0

Ich analysierte es, aber ich werde das auch versuchen, danke. –

Antwort

0

Die Lösung Nae veröffentlicht scheint zu funktionieren. Meine Schaltfläche behandelt num2 noch nicht richtig, aber whichNum wird in commandButtonPress aktualisiert. Danke für die Hilfe. Ich beendete dieses Projekt (mehr oder weniger) und lud es auf my repo.

from tkinter import * 
whichNum = False 
def buttonOne(): 
    global whichNum 
    count = 0 
    number = "" 
    try: 
     if whichNum == False and num1[0] != "0": 
      num1.append("1") 
      while count < len(num1): 
       number = number + str(num1[count]) 
       count += 1 
      screen["text"] = number 
     elif whichNum == True and num2[0] != "0": 
      num2.append("1") 
      while count < len(num2): 
       number = number + str(num2[count]) 
       count += 1 
      screen["text"] = number 
    except: 
     if whichNum == False: 
      num1[0] = "." 
     else: 
      num2[0] = "." 
     number = "0." 
     screen["text"] = number 
def commandButtonPress(symbol): 
    global whichNum 
    if whichNum == False: 
     if len(operator) > 0 and operator[0] == "+": 
      operator.remove("+") 
    if len(num1) > 0: 
     operator.append(symbol) 
     whichNum[0] = True 
def main(): 
    window = Tk() 
    window.title("Calculator") 
    window.geometry("250x305") 
    num1 = [] 
    num2 = [] 
    operator = [] 
    global whichNum 

    global screen 
    screen = Label(text="0", height = 5, width = 30) 
    screen.pack(side = LEFT, expand=False, anchor = N, padx=[5, 5]) 

    button1 = Button(text="1", command = lambda: buttonOne()) 
    button1.grid(column=0, row=2) 
    button11 = Button(text="+", command = lambda: commandButtonPress("+")) 
    button11.grid(column=3, row=2) 
    window.mainloop() 

main() 
Verwandte Themen