2014-09-18 6 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

+0

전체 계산기가 포함되도록 업데이트되었습니다. 그것은 나를 위해 작동합니다 – user3763447

+0

메뉴에서 선택한 후 '선택 선택'을 '빼기'로 변경하면 발생합니다. – user3763447

답변

0

예상되는 것을 이해하기 어렵습니다. 예를 들어,이 코드를 보면 :

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

이 코드는 오직 한 번 실행됩니다, 그리고 당신이 그것을가 초기화 무엇 때문에 선택은 항상 0이됩니다. 그것은 하나의 함수에서 하나의 루프가 아니기 때문에 실행됩니다. 그래서 python이 코드를 파싱하여 실행하고 다음 라인으로 옮깁니다. 이 텍스트 블록은 두 번 이상 처리되지 않습니다. 당신은 사용자가 메뉴 항목을 선택하면 레이블을 변경하려면

, 당신은 choice2 함수 내에서 그 코드를 실행해야합니다 :

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

메인 포스트에서 케빈은 그것을 지적했습니다. 나는 어떻게 작동하는지 오해 한 것 같습니다. 이 코드 블록을 변경하면 어떻게 될까요? 그 동안 루프를 완성 할 수 있을까요? 나는이 질문을 게시하기 전에 그것을 시험해 보았지만 프로그램이 실행되지 않게 만들었지 만 빈 터미널 창만 가져 왔습니다. – user3763447

+0

@ user3763447 : "변경 사항 확인"이란 무엇을 의미합니까? GUI가 작동하는 방식은 바인딩을 설정하거나 위젯에 명령을 연결하는 것입니다. 이벤트가 발생하거나 위젯이 호출되면 연관된 명령이 실행됩니다. 메뉴를 선택할 때 이미'choice2'를 호출 중이므로 레이블을 업데이트하기에 완벽한 장소입니다. –

+0

@ user3763447 : 루프를 설정할 필요가 없습니다. 이것은 'mainloop'입니다. Mainloop은 이벤트를 대기하고 연관된 함수를 호출하는 무한 루프입니다. –