2016-04-27 13 views
0

私は最近、Pythonの学習を開始しました。練習のために、私はmySQLワークベンチのように少し働くウィンドウ環境を作ることに決めました。 2番目のクエリを送信しても前のクエリが削除されていないことがわかるまで、すべてうまくいきました。 次のようにボタンのコールバックのための私のコードは次のとおりです。Tkinterフレームを削除して別のフレームに置き換えたい

def queryBtnCallBack(): 
    global query 
    global queryEntry 
    global resList 
    global resFrame 
    j=1 
    #Delete frame before showing next data 
    for widget in resFrame.winfo_children(): 
     widget.destroy() 
    #For this one I also tried 
    #if resFrame != None: 
    # resFrame.destroy() 

    cursor = db.cursor() 

    resFrame = Tkinter.Frame() 
    #Check if user has given a correct input 
    try: 
     query = queryEntry.get() 
     cursor.execute(query) 
     data = cursor.fetchall() 
    #Let user know if something is wrong 
    except: 
     errorQLabel = Tkinter.Label(resFrame, text='Error. Please make sure your query is correct', bg='#99b3e6') 
     errorQLabel.grid(row=j+1, column=2) 
     resFrame.configure(background='#99b3e6') 
     resFrame.pack() 
     return 

    for i in data: 
     resList.append(i) 

    #Query Results window part 
    for i in range(len(resList)): 
     j += 1 
     resultLabel = Tkinter.Label(resFrame, text=resList[i], bg='#99b3e6') 
     resultLabel.grid(row=j, column=2) 

    resFrame.configure(background='#99b3e6') 
    #Pack the results frame 
    resFrame.pack() 

私は今それをやっている方法は、それがフレームを削除しますが、その後1今、削除の下に、次のいずれかを置きます。 どんな種類のヘルプがあれば幸いです。 ありがとうございました

+0

子ウィンドウと親ウィンドウの概念を継承する必要がありますhttp://stackoverflow.com/questions/15306631/how-tocreate-children-windows-using-python-tkinter –

+0

+1既存のウィジェットを更新しています。新しいテキストではなく、フレームを削除するには、resFrameを削除します。これにより、フレーム内のすべてのウィジェットが削除されるので、wininfo_childrenの結果を削除する必要はありません。最初のパスでテストするオブジェクトがあるので、関数の先頭でresFrame = Noneで始めるので、正常に動作するはずです。 –

+0

コード内のコメントは、 'resframe.destroy()'を試したことを示しています。何が起こった?それは正しい解決策のように見えます。 –

答えて

0

多分、これは必要以上に複雑にしようとしています。 1つの大きなラベルを保持し、新しいデータを表示するために新しいテキストを再設定することをお勧めします。おそらく、改行をデータに挿入してセクションを分けておくことをお勧めします。エントリウィジェットから前のクエリを取り除くには、queryEntry.delete('0', 'end')を実行してください。

関連する問題