2013-03-08 5 views
0

버튼을 클릭하면 프로그램을 여는 간단한 Tkinter 프로그램을 실행하려고합니다. 코드는 다음과 같습니다. 나는 명령을 사용하여 포트란 프로그램을 호출하는 프로그램을 호출한다. 그러나 버튼을 클릭하면 프로그램이 열리지 만 호출중인 프로그램의 메뉴는 무한 루프로 진행됩니다. 문제가되는 코드는 button1Click 모듈에있는 것처럼 보입니다.Tkinter 파이썬 코드의 무한 루프

도움을 주시면 대단히 감사하겠습니다.

감사

from Tkinter import * 
import os, sys 
from win32com.client import Dispatch 
xlApp=Dispatch('Excel.Application') 
_PSSBINPATH=r"C:\Program Files\PTI\PSSE32\PSSBIN" 
os.environ['PATH']=_PSSBINPATH+';'+os.environ['PATH'] 
sys.path.insert(0,_PSSBINPATH) 
import redirect; redirect.psse2py() 
import psspy 

class MyApp: 
    def __init__(self, parent): 
     self.myParent = parent ### (7) remember my parent, the root 
     self.myContainer1 = Frame(parent) 
     self.myContainer1.pack() 

     self.button1 = Button(self.myContainer1) 
     self.button1.configure(text="OK", background= "green") 
     self.button1.pack(side=LEFT) 
     self.button1.bind("<Button-1>", self.button1Click) ### (1) 

     self.button2 = Button(self.myContainer1) 
     self.button2.configure(text="Cancel", background="red") 
     self.button2.pack(side=RIGHT) 
     self.button2.bind("<Button-1>", self.button2Click) ### (2) 

    def button1Click(self,event): ### (3) 
     psspy.runiplanfile(r"C:\MNTACT\Contingency Program\work\contingency-31-4.irf") 
     if self.button1["background"] == "green": ### (4) 
      self.button1["background"] = "yellow" 
     else: 
      self.button1["background"] = "green" 

    def button2Click(self, event): ### (5) 
     self.myParent.destroy()  ### (6) 


root = Tk() 
myapp = MyApp(root) 
root.mainloop() 

답변

0

당신이 일어나고 무한 루프 거기에 대해 어떻게 생각 하죠? 루프가 runiplanfile에 있지 않는 한 button1Click에 루프가 표시되지 않습니다. "무한 루프"를 사용하여 GUI가 응답을 멈췄다는 것을 의미합니까?

Tkinter는 단일 스레드이며 이벤트 루프를 통하는 경우를 제외하고는 이벤트를 처리 할 수 ​​없습니다. 한 이벤트가 처리하는 데 오랜 시간이 걸리면 GUI는 해당 이벤트의 처리가 완료 될 때까지 중단됩니다. 외부 프로세스를 실행하고 프로세스가 완료되기를 기다리는 중이면 해당 프로세스가 완료 될 때까지 GUI가 고정 된 것처럼 보입니다.