Python Tkinter子窗口问题

fre*_*_52 1 python user-interface tkinter python-2.7

您好,我正在努力在python中使用多个tkinter窗口.基本上,我有两个类,它们也与两个不同的窗口相关.主类显示主窗口(parentWindow),另一个类显示第二个窗口(childWindow).以下代码启动MainWindow:

#START THE APPLICATION
root = Tkinter.Tk()
root.title ("GEMEINDESTECKBRIEF-Menü")
# My main Application
runGUI = MainWorkspaceConfig (root)
root.mainloop ()
Run Code Online (Sandbox Code Playgroud)

到目前为止没有任何问题!

现在我正在尝试打开第二个Window调用Main Class中的函数(onClickFunction打开Window的那种)

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()
Run Code Online (Sandbox Code Playgroud)

仍然一切正常!窗口按预期打开,GUI小部件也显示并可用.完成给定的任务后,窗口必须关闭,这里所有的故障开始! 要退出Window我正在使用一个带有命令功能的按钮,如下所示:

   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()
Run Code Online (Sandbox Code Playgroud)

self.tkinterFrame.quit()关闭不只是secondWindow(childWindow)也关闭主窗口(parentWindow)了.该self.tkinterFrame.destroy()函数清除所有控件从窗口,但窗口仍然是积极和明显的!

那么,任何想法如何解决问题?会感谢任何解决方案!!!!!

Jun*_*uxx 7

不做二次Tk(); 你可以/应该只有一个根.

而是使用Toplevel小部件facthwgeb.此外,摆脱facthwgeb.mainloop()呼叫,再次,应该只有一个呼叫.