2013-02-17 74 views
0

我有一个应用程序设计完成,没有任何有用的东西发生,但我有两个窗口。一个是主窗口,一个是关于对话。它们都来自Glade的一个.ui文件。关于对话两次关于对话的空白窗口?

当我使用帮助>关于(在我的程序中)打开关于对话框时,一切正常。关闭它并使用相同的方法再次打开它会导致一个空白窗口。

这里是我的代码:

#! /usr/bin/env python3 

from gi.repository import Gtk 

class window(): 
    def __init__(self): 
     self.builder = Gtk.Builder() 

     self.builder.add_from_file("./personalinfo.ui") 

     self.mainWindow = self.builder.get_object("mainWindow") 

     self.mainWindow.connect("destroy", self.on_mainWindow_destroy) 

     self.mainWindow.set_title("Persona") 

     self.mainWindowMainBoxButtonBoxCancel = self.builder.get_object("mainWindowMainBoxButtonBoxCancel") 

     self.mainWindowMainBoxButtonBoxCancel.connect("clicked", self.on_mainWindowMainBoxButtonBoxCancel_clicked) 

     self.mainWindowMainBoxButtonBoxOK = self.builder.get_object("mainWindowMainBoxButtonBoxOK") 

     self.mainWindowMainBoxButtonBoxOK.connect("clicked", self.on_mainWindowMainBoxButtonBoxOK_clicked) 

     self.mainWindowMainBoxGenderBoxCombo = self.builder.get_object("mainWindowMainBoxGenderBoxCombo") 

     self.mainWindowMainBoxGenderBoxCombo.set_active(0) 

     self.mainWindowMainBoxMenuFileMenuQuit = self.builder.get_object("mainWindowMainBoxMenuFileMenuQuit") 

     self.mainWindowMainBoxMenuFileMenuQuit.connect("activate", self.on_mainWindowMainBoxMenuFileMenuQuit_activate) 

     self.mainWindowMainBoxMenuHelpMenuAbout = self.builder.get_object("mainWindowMainBoxMenuHelpMenuAbout") 

     self.mainWindowMainBoxMenuHelpMenuAbout.connect("activate", self.on_mainWindowMainBoxMenuHelpMenuAbout_activate) 

     self.mainWindow.show_all() 

    def on_mainWindow_destroy(self, widget): 
     print("destroy: 'mainWindow'") 

     Gtk.main_quit() 

    def on_mainWindowMainBoxButtonBoxCancel_clicked(self, widget): 
     print("clicked: 'mainWindowMainBoxButtonBoxCancel'") 

     Gtk.main_quit() 

    def on_mainWindowMainBoxButtonBoxOK_clicked(self, widget): 
     print("clicked: 'mainWindowMainBoxButtonBoxOK'") 

     Gtk.main_quit() 

    def on_mainWindowMainBoxMenuFileMenuQuit_activate(self, widget): 
     print("activate: 'mainWindowMainBoxMenuFileMenuQuit'") 

     Gtk.main_quit() 

    def on_mainWindowMainBoxMenuHelpMenuAbout_activate(self, widget): 
     print("activate: 'mainWindowMainBoxMenuHelpMenuAbout'") 

     self.aboutWindow = self.builder.get_object("aboutWindow") 

     self.aboutWindow.set_title("About Persona") 

     self.aboutWindowMainBoxButtonBoxOK = self.builder.get_object("aboutWindowMainBoxButtonBoxOK") 

     self.aboutWindowMainBoxButtonBoxOK.connect("clicked", self.on_aboutWindowMainBoxButtonBoxOK_clicked) 

     self.aboutWindow.show_all() 

    def on_aboutWindowMainBoxButtonBoxOK_clicked(self, widget): 
     print("clicked: 'aboutWindowMainBoxButtonBoxOK'") 

     self.aboutWindow.destroy() 

w = window() 

Gtk.main() 

回答

2

的关于每次调用self.aboutWindow = self.builder.get_object("aboutWindow")它是当你加载UI文件创建一次,时间不创建的窗口。所以当你打电话给self.aboutWindow.destroy()时,它会永远销毁它,并且当你下一次尝试显示它不存在的窗口时。

相反销毁窗口中,你可能想隐藏它,而不是self.aboutWindow.hide()

+0

谢谢,我想它的每一个我分配它self.aboutWindow时间得到aboutWindow的新实例 – 2013-02-18 09:43:40