2013-02-17 77 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