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今、削除の下に、次のいずれかを置きます。 どんな種類のヘルプがあれば幸いです。 ありがとうございました
子ウィンドウと親ウィンドウの概念を継承する必要がありますhttp://stackoverflow.com/questions/15306631/how-tocreate-children-windows-using-python-tkinter –
+1既存のウィジェットを更新しています。新しいテキストではなく、フレームを削除するには、resFrameを削除します。これにより、フレーム内のすべてのウィジェットが削除されるので、wininfo_childrenの結果を削除する必要はありません。最初のパスでテストするオブジェクトがあるので、関数の先頭でresFrame = Noneで始めるので、正常に動作するはずです。 –
コード内のコメントは、 'resframe.destroy()'を試したことを示しています。何が起こった?それは正しい解決策のように見えます。 –