0

ボタンをクリックするとプログラムを開く単純な Tkinter プログラムを実行しようとしています。コードを以下に示します。コマンドを使用してプログラムを呼び出し、そのプログラムが fortran プログラムを呼び出します。ただし、ボタンをクリックするとプログラムが開きますが、呼び出しているプログラムのメニューが無限ループに入ります...問題のあるコードはbutton1Clickモジュールにあるようです。

どんな助けでも大歓迎です。

ありがとう

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() 
4

1 に答える 1

0

無限ループが起こっていると思う理由は何ですか? ループが にない限り、button1Click にループはありませんruniplanfile。GUI が応答しなくなったことを単に意味するために「無限ループ」を使用していますか?

Tkinter はシングル スレッドであり、イベント ループ以外ではイベントを処理できません。1 つのイベントの処理に時間がかかると、そのイベントの処理が完了するまで GUI がハングします。外部プロセスを実行し、その完了を待っている場合、そのプロセスが完了するまで GUI はフリーズしているように見えます。

于 2013-03-08T18:53:53.637 に答える