2015-06-29 3 views
0

Код:Reopen окно с помощью PyGObject

<...> 
class Handler: 
    <...> 
    @staticmethod 
    def about_destroy(*args): 
     about_win.destroy() 
    <...> 
    @staticmethod 
    def about_menu(*args): 
     about_win.show_all() 

builder = Gtk.Builder() 
builder.add_from_file("{}/gui.glade".format(SCRIPTDIR)) 
builder.connect_signals(Handler()) 

about_win = builder.get_object("About") 

main = builder.get_object("Main") 
main.show_all() 
<...> 
Gtk.main() 

Я пытаюсь вновь открыть окно, но получить: (gui.py:20607):

Gtk-ВАЖНЫЙ **: gtk_widget_show: утверждение 'GTK_IS_WIDGET (виджет)' не удалось

(gui.py:20607): Gtk-ВАЖНЫЙ **: gtk_label_set_markup: утверждение 'GTK_IS_LABEL (ярлык)' не удалось

(gui.py:20607): Gtk-ВАЖНЫЙ **: gtk_container_foreach: утверждение 'GTK_IS_CONTAINER (контейнер)' не удалось

О Диалог:

<object class="GtkAboutDialog" id="StatsAbout"> 
    <property name="can_focus">False</property> 
    <property name="title">...name of the program...</property> 
    <property name="resizable">False</property> 
    <property name="window_position">center-on-parent</property> 
    <property name="icon_name">..icon...</property> 
    <property name="type_hint">dialog</property> 
    <property name="has_resize_grip">False</property> 
    <property name="program_name">...name of a program...</property> 
    <property name="version">1.0</property> 
<property name="version">1.0</property> 
    <property name="copyright">...my name...</property> 
    <property name="comments" translatable="yes">...description...</property> 
    <property name="website">...my website...</property> 
    <property name="website_label" translatable="yes">...name of a website...</property> 
    <property name="license">...very long license...</property> 
<property name="authors">...authors...</property> 
    <property name="artists">...artists...</property> 
    <property name="logo_icon_name">...icon...</property> 
    <property name="wrap_license">True</property> 
    <property name="license_type">custom</property> 
    <signal name="close" handler="about_destroy" swapped="no"/> 
    <signal name="destroy" handler="about_destroy" swapped="no"/> 
    <signal name="response" handler="about_destroy" swapped="no"/> 
    <child internal-child="vbox"> 
     <object class="GtkBox" id="AboutContainer"> 
     <property name="can_focus">False</property> 
     <property name="orientation">vertical</property> 
     <property name="spacing">2</property> 
     <child internal-child="action_area"> 
      <object class="GtkButtonBox" id="AboutButtons"> 
      <property name="can_focus">False</property> 
      <property name="layout_style">end</property> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="pack_type">end</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
      <placeholder/> 
     </child> 
     </object> 
    </child> 
    </object> 

ответ

1

Я решил мой проблема сама по себе.

Я использую .hide() метод вместо .destroy() в настоящее время. Мой код:

<...> 
class Handler: 
    <...> 
    @staticmethod 
    def about_destroy(*args): 
     about_win.hide() 
    <...> 
    @staticmethod 
    def about_menu(*args): 
     about_win.show_all() 

builder = Gtk.Builder() 
builder.add_from_file("{}/gui.glade".format(SCRIPTDIR)) 
builder.connect_signals(Handler()) 

about_win = builder.get_object("About") 

main = builder.get_object("Main") 
main.show_all() 
<...> 
Gtk.main()