2014-09-18 71 views
0

有人問我來編輯我的代碼裏面的標籤,所以我決定把整個計算器腳本Tkinter的:如何改變程序本身

from tkinter import * 
global choice 
choice = 0 


#Program 
def calculate(*event): 
    if choice == 1: 
     try: 
      add1 = ccalc1.get() 
      add2 = ccalc2.get() 
     except: 
      no = Label(app, text="You must use a number").grid(row=0, column=0) 
     answ = add1 + add2   
     answer = Label(app, text = answ).grid(row=1, column=0) 
    elif choice == 2: 
     try: 
      sub1 = ccalc1.get() 
      sub2 = ccalc2.get() 
     except: 
      no = Label(app, text="You must use a number").grid(row=1, column=0) 
     answ = sub1 - sub2   
     answer = Label(app, text = answ).grid(row=1, column=0) 
def choice2(): 
    global choice 
    choice = 2  
#End Program 
#GUI 
#Window Info 
calc = Tk() 
calc.title("Calculator") 
calc.geometry("200x140") 
#End Window Info 

#Build Window 
app = Frame(calc) 
app.grid() 
ccalc1 = IntVar() 
ccalc2 = IntVar() 

#Widgets 
if choice == 0: 
    welcome = Label(app, text="Select a choice") 
elif choice == 2: 
    welcome.config(text="Subtraction") 
calcbox1 = Entry(app,textvariable=ccalc1) 
calcbox2 = Entry(app,textvariable=ccalc2) 
submit = Button(app, text="CALCULATE", command = calculate) 

welcome.grid(row=0,column=0) 
calcbox1.grid(row=2, column=0) 
calcbox2.grid(row=3, column=0) 
submit.grid(row=4, column=0) 
calc.bind('<Return>', calculate) 
#End Widgets 

#Menu 
menu=Menu(calc) 
#Operations 
filemenu = Menu(menu,tearoff=0) 
filemenu.add_command(label="Subtract", command = choice2) 
menu.add_cascade(label="Operations",menu=filemenu)  
calc.config(menu=menu) 
calc.mainloop() 
#End GUI 

自己做錯了什麼是歡迎標籤文本不會隨之改變。

更新:我包括整個計算器代碼

任何幫助表示讚賞。

+0

請仔細檢查您在這裏發佈的代碼。我試着運行它並得到了'IndentationError:unindent不匹配任何外部縮進級別'。 – Kevin 2014-09-18 20:04:28

+0

更新爲包含整個計算器。它適用於我 – user3763447 2014-09-18 20:08:34

+0

在菜單中選擇選項後,'選擇選項'會變爲'減法' – user3763447 2014-09-18 20:09:39

回答

0

很難理解你期望發生的事情。例如,看一下這個代碼:

#Widgets 
if choice == 0: 
    welcome = Label(app, text="Select a choice") 
elif choice == 2: 
    welcome.config(text="Subtraction") 

這個代碼將只執行一次,而選擇將永遠是零,因爲這是你初始化什麼。它只執行一次,因爲它不在函數中,也不在循環中,所以python解析它將運行它的代碼並移到下一行。該文本塊將永遠不會被第二次處理。

如果希望當用戶選擇一個菜單項的標籤改變,你需要執行choice2函數內部的代碼:

def choice2(): 
    global choice 
    choice = 2 
    welcome.config(text="Subtraction") 
+0

在主要職位凱文指出,我想我誤解了如何工作。我將如何去關於讓這個代碼塊尋找任何改變?會使它成爲一個while循環完成?我在發佈這個問題之前試過,但是它導致程序不能運行,它只會引出一個空的終端窗口。 – user3763447 2014-09-18 21:45:30

+0

@ user3763447:你是什麼意思「尋找任何改變」? GUI的工作方式是設置綁定或將命令與小部件相關聯。當事件發生或小部件被調用時,運行相關的命令。當菜單被選中時,你已經調用了'choice2',所以這是更新標籤的理想場所。 – 2014-09-18 21:47:51

+0

@ user3763447:你不需要設置一個循環 - 'mainloop'就是這樣。 Mainloop是一個等待事件和調用相關函數的無限循環。 – 2014-09-18 21:48:39