Python Tkinter子窗口问题

2024-10-01 22:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

现在我尝试打开另一个窗口,调用Main类中的函数(类似于onClickFunction来打开窗口)

^{pr2}$

一切都很好!!窗口按预期打开,并且显示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()不仅关闭第二个窗口(子窗口),还关闭主窗口(父窗口)。self.tkinterFrame.destroy()函数清除窗口中的所有窗口小部件,但窗口仍处于活动状态且可见!!在

那么,有什么办法解决这个问题吗? 感谢您的任何解决方案!!!!!在


Tags: andpath函数selfdatagetosmain
3条回答

不要创建第二个Tk()实例;您可以/应该只有一个根。在

facthwgeb使用Toplevel小部件。另外,请去掉facthwgeb.mainloop()调用,因为应该只有一个对此调用。在

是的,我终于找到了解决问题的办法!!!!在

第一步:在启动ChildWindow的主类中,我将函数def opendirFactsheetHochwasserGebaeude (self) :中的代码从Tkinter.Tk()更改为Tkinter.Toplevel(parent)=>;父窗口引用根窗口。更改Tkinter typ后,facthwgeb.mainloop()也被清除,因为它是由主窗口(父窗口)提供的

第二步:在实现ChildWindow的第二个类中,函数def closeFactsheetHochwGeb (self):私自拥有命令self.tkinterFrame.destroy(),该命令清除了框架的小部件,而不是窗口本身,self.tkinterFrame.quit()关闭了主窗口和ChildWindow=>;因此这两个命令都是无用的!!在

最后一步:最终的解决方案是将self.tkinterFrame.destroy ()更改为self.tkinterFrame.master.destroy()!!在

有时候复杂的事情可以很简单!!:-)

试试这个self.Frame1.destroy() 或者不管你叫什么名字 有时候你可以吃这个 self.Frame1 = tk.Frame(top)

相关问题 更多 >

    热门问题