0

ここで誰かが私を助けてくれることを願っています。私が作成した tkinter GUI に問題があります。この問題は Windows でのみ発生します。私のGUIは、いくつかのラベルを含む結果フレームを作成します.何か他のものを計算するときは、ユーザーが「newPort」ボタンをクリックすると、そのボタンは結果フレームを削除Falseし、計算に内部のいくつかのインスタンス属性に設定します 私が抱えている問題は、ウィンドウでのみ明らかであり、結果frameとその子孫labelsが毎回消えないことがあります。時々彼らはそうします、時々彼らはしません。インスタンス変数は正しく設定されてFalseいますが、ウィジェットはまだメイン GUI に表示されています。GUI には、いくつかcheckboxesradiobuttonsただし、結果フレームの作成にも予想される破壊にも影響しません。ボタンをクリックする前にユーザーが実行するアクションのパターンを特定できませんでした。newPortこれにより、frameandlabelsが破壊されません。これは、py2exe でアプリをフリーズし、Eclipse IDE 内の Python インタープリターからアプリを実行すると発生します。Python インタープリターから直接 (つまり、IDE なしで) アプリを実行しようとしたことはありません。また、Eclipse Python インタープリターを使用してアプリを実行すると、Mac でこの問題は発生しません。どうもありがとうございました!私のコードは次のようになります。

import Tkinter as TK
class widget(object):
    def __init__(self,parent=None):
        self.parent = TK.Frame(parent)
        self.parent.grid()
        self.frame = TK.Frame(self.parent)
        self.frame.grid()
        newLedger = TK.Button(self.parent,command=self.newPort).grid()
        self.calcButton = TK.Button(self.frame,command=self.showResults)
        self.calcButton.grid()
        self.calcVariable = True
    def newPort(self):
        self.calcVariable = False
        try:
            self.second.grid_forget()
            self.first.grid_forget()
            self.resultsFrame.grid_forget()
            self.second.destroy()
            self.first.destroy()
            self.resultsFrame.destroy()
        except:
            raise
        self.frame.update_idletasks()
    def showResults(self):
        self.resultsFrame = TK.Frame(self.frame)
        self.resultsFrame.grid()
        self.first = TK.Label(self.resultsFrame,text='first')
        self.first.grid()
        self.second = TK.Label(self.resultsFrame,text='second')
        self.second.grid()
if __name__ == '__main__':
    root = TK.Tk()
    obj = widget(root)
    root.mainloop()
4

1 に答える 1

1

ラベルを破棄したり呼び出したりする必要はなく、resultsFramegrid_forgetを呼び出す必要もありません。grid_forgetresultsFrame を破棄すると、そのすべての子が破棄され、これらのウィジェットが破棄されると、グリッドによって管理されなくなります。

ウィジェットが破棄されないようにする唯一の方法は、間に「新規」ボタンをクリックせずに「計算」ボタンを2回続けてクリックすることです。コマンドラインからプログラムを実行してこれを行っています。

于 2012-08-22T20:02:06.133 に答える