こんにちは、Pythonで複数のtkinterウィンドウを使用するのに苦労しています。基本的に、2つの異なるウィンドウに関連する2つのクラスがあります。メインクラスはメインウィンドウ(parentWindow)を示し、他のクラスはsecondWindow(childWindow)を示します。次のコードはメインウィンドウを起動します。
#START THE APPLICATION
root = Tkinter.Tk()
root.title ("GEMEINDESTECKBRIEF-Menü")
# My main Application
runGUI = MainWorkspaceConfig (root)
root.mainloop ()
これまでのところ問題はありません!
ここで、メインクラスの関数を呼び出す2番目のウィンドウを開こうとしています(ウィンドウを開くためのonClickFunctionの一種)
def opendirFactsheetHochwasserGebaeude (self) :
#validates the workspace resp. database directory and
#print self.checkFactsheet2.get()
#print self.inputSpace1.get()
try:
if self.checkFactsheet2.get()==1 :
if self.inputSpace1.get() or self.inputSpace2.get() != "":
#write workspace environment to __initFile__
if self.inputSpace1.get() != "":
self.writeWorkspEnv(self.inputSpace1.get())
#Copy file in seperate thread
start_new_thread(self.copyDefaultFactoWorkspace,())
if self.inputSpace2.get() != "":
self.writeWorkspEnv(self.inputSpace2.get())
# !!!!!!! START SECOND WINDOW !!!!!
facthwgeb = Tkinter.Tk()
facthwgeb.title ("Factsheet Hochwasser-Gebäude")
runGUI = Factsheet_hochwassergebaeude (facthwgeb)
facthwgeb.mainloop ()
#facthwgeb.protocol('WM_DELETE_WINDOW', runGUI.closeFactsheetHochwGeb)
else:
#self.inputSpace1.get() and self.inputSpace2.get () =="":
tkMessageBox.showwarning ("Keine Arbeitsumgebung festgelegt", "Bitte entweder einen neuen Workspace anlegen oder eine bestehende Datenbank auswählen!")
self.selectBox1.deselect()
それでもすべてがうまく機能します!! ウィンドウが期待どおりに開き、GUIウィジェットも表示されて使用可能になります。与えられたタスクを完了した後、ウィンドウを閉じる必要があり、ここですべてのトラブルが始まります!!! ウィンドウを終了するには、次のようなコマンド関数を備えたボタンを使用しています。
def closeFactsheetHochwGeb (self):
try:
if self.inputSpace1.get() and self.inputSpace2.get() != "":
with open('%s/__initFile__.txt'%os.path.dirname(os.path.realpath(__file__)), 'r') as file:
# read a list of lines into data
data = file.readlines()
data[13] = self.inputSpace1.get()+"\n"
data[14] = self.inputSpace2.get()+"\n"
# and write everything back
with open('%s/__initFile__.txt'%os.path.dirname(os.path.realpath(__file__)), 'w') as file:
file.writelines( data )
file.close()
# self.tkinterFrame.destroy()
self.tkinterFrame.quit()
self.tkinterFrame.quit()は、secondWindow(childWindow)だけでなく、MainWindow(parentWindow)も閉じます。self.tkinterFrame.destroy ()関数はウィンドウからすべてのウィジェットをクリアしますが、ウィンドウはまだアクティブで表示されています!!
それで、問題を解決する方法について何かアイデアはありますか?どんな解決策にも感謝します!!!!!