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

윈도우는 당신이 UI 파일을로드 할 때 한 번 만들어 self.aboutWindow = self.builder.get_object("aboutWindow") 호출 할 때마다 생성되지이다. 그래서 self.aboutWindow.destroy()에 전화하면 그것을 영원히 파괴하고 다음 번에 더 이상 존재하지 않는 창을 표시하려고 할 때 더 이상 존재하지 않게됩니다.

대신 창을 파괴하는, 당신은 아마 나는 그것이 aboutWindow의 새로운 인스턴스에게 내가 self.aboutWindow하는 데 할당 된 모든 시간을 가지고 생각 대신 self.aboutWindow.hide()

+0

감사를 숨기려면 –