2014-02-07 2 views
0

현재 Python으로 CFD 프로그램을 작성하고 있으며 스크립트는 미리 정의 된 많은 전역 변수를 계산에 사용합니다.GUI를 사용하여 변수를 입력하고 Python으로 스크립트를 실행하십시오.

사용자가이 모든 변수를 입력 할 수있는 GUI를 작성한 다음 스크립트를 실행하고 주 콘솔에서 결과를 리턴하고 싶습니다. 나는 이것을하기 위해 Tkinter를 사용해 보았지만 전역 변수를 설정하는 방법을 찾지 못했습니다.

다음은 간단한 글로벌 변수 설정이 필요한 훨씬 간단한 계산을 수행하기 위해 설계 한 간단한 GUI입니다.

'''GUI 2''' 
import Tkinter 
factor = 10 

def GUIrun(n): 
    return n * factor 

class simpleGUI(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent=parent 

    def initialize(self): 
     self.grid() 

     self.entryVariable = Tkinter.StringVar() 
     self.entry = Tkinter.Entry(self,textvariable=self.entryVariable) 
     self.entry.grid(column=0,row=0,sticky='EW') 
     self.entry.bind("<Return>",self.OnPressEnter) 
     self.entryVariable.set("n") 

     button=Tkinter.Button(self,text="Run",command=self.OnButtonClick) 
     button.grid(column=1,row=0) 

     self.labelVariable = Tkinter.StringVar() 
     label=Tkinter.Label(self,textvariable=self.labelVariable, 
     anchor="w",fg="white",bg="blue") 
     label.grid(column=0,row=1,columnspan=2,sticky='EW') 
     self.labelVariable.set("Hello!") 

     self.grid_columnconfigure(0,weight=1) 
     self.resizable(True,False) 
     self.entry.focus_set() 
     self.entry.selection_range(0, Tkinter.END) 

    def OnPressEnter(self,event): 
     n = self.entryVariable.get() 
     self.labelVariable.set("n = " +self.entryVariable.get()) 
     self.entry.focus_set() 
     self.entry.selection_range(0, Tkinter.END) 


    def OnButtonClick(self): 
     n=self.entryVariable.get() 
     return GUIrun(n) 


if __name__=="__main__": 
    app=simpleGUI(None) 
    app.title('poster') 
    app.initialize() 
    app.mainloop() 

내가 어떤 도움 감사하겠습니다은

+0

문제점은 무엇입니까? 글로벌 변수가 필요한 이유는 무엇입니까? 전역 값을 많이 사용하는 스크립트가 있다면 클래스에서 다시 작성하고 줄여야한다고 생각합니다. –

답변

1

Tkinter를 전역 변수에 대한 다른 모듈 다르지 않다 주셔서 감사합니다. 변수를 전역 변수로 선언 한 다음 값을 설정하십시오.

코드가 작동하지만 원하는대로 할 수 있는지 잘 모르겠습니다. 당신이 수학을하고 싶은 경우에, 당신은 정수로 입력 값을 변환해야합니다

def OnButtonClick(self): 
    n=int(self.entryVariable.get()) 
    ... 

귀하의 다른 옵션은 오히려 당신을 위해 변환을 수행하는 StringVar보다는 IntVar을 사용하는 것입니다.

다른 문제는 Tkinter가 작동하는 방식에 대한 근본적인 오해 인 것처럼 보입니다. OnButtonClick 함수는 해당 인수로 함수를 올바르게 호출 한 다음 그 결과를 반환합니다. 그걸 돌려 준다고 생각하니? 버튼 명령에서 반환 값을 기대하는 코드는 어디에도 없습니다.

결과를 인쇄하거나 다른 기능으로 전달하거나 변수를 설정해야합니다. 버튼 콜백에서 리턴을 호출하는 것은 결과를 버리는 것과 비슷합니다.

관련 문제