2017-12-21 14 views
0

私は電卓に取り組んでいると私はそれをしたいユーザーは、最初の番号を入力することで行われ、オペレータを選択したらそう(+ - * /など)は、二番目の数字を入力することができ、その後、その答えを得るために等しいボタンを押します。tkinterボタンを使用してブール値を更新するにはどうすればよいでしょうか?

現在、私はdefの中で私のブールに値を割り当てることができません。それは、私が第2の数値を入力して最終的に機能を実行できなくなってしまっています。 commandButtonPress()の最後の行は、物事がアップスリップしている場所であり、前に私はなっていたwhichNumlist作りへ:私は直接割り当てなどremove()を使用して両方を試してみました割り当て

前に参照さ

変数をおよびappend()。ボタン1〜9は同じコードブロックを使用し、この問題を解決するために必要ではないと考えて小数点を含めなかった。

私はこれのどれも洗練されていないと私はクラスを実装する場合は、そのほとんどがはるかに良いだろうけど、私は、新しいものを把握しようとしていますし、まだのpythonでオブジェクト指向プログラミングを行っていません。

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

[最小限で完全で検証可能な例を作成する](https://stackoverflow.com/help/mcve)ください。それはあなたの質問がはるかに簡単な方法で聞かれることができるように、人々を助けることを躊躇しているからです。 – Nae

+0

すべての関数の外側で 'whichNum = None'を定義し、すべての関数に' globalNum'を最初の行として追加してみてください。 – Nae

+0

私はそれを解析しましたが、私はあまりにも感謝します。 –

答えて

0

掲載された解決策はうまくいくようです。私のボタンはnum2を正しく処理していませんが、commandButtonPressのように更新されていません。助けてくれてありがとう。私はこのプロジェクトを多分終了し、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() 
関連する問題