web-dev-qa-db-ja.com

Pythonユニティインジケーターアプレットと空き地の子ウィンドウが同時に終了します

あまり評判が良くないので。元の質問はstackoverflowに投稿されており、ここにリンクがあります:
Pythonユニティインジケーターアプレットと空き地の子ウィンドウ

pythonとgladeでユニティインジケーターアプレットを作成しました。インジケーターアプレットをクリックしたときに表示されるスクリーンショットです。設定メニューが表示されます。この設定メニューをクリックすると、新しい窓。

Indicator Applet Menu
Indicator Applet Menu

Preference Window
Preference Window

ここで問題は、閉じるボタンをクリックすると、アプリケーション全体が存在することです。

設定ウィンドウをトリガーするコードは次のとおりです。

def action_preferences(self, widget):
    '''
    Show the preferences window
    '''
    base = PreferenceWindow()
    base.main()

    self.menu_setup()

preference.pyのコードは次のとおりです。

 import sys 
 import json 
 import pynotify 
 
 try:
 import pygtk 
 pygtk.require( " 2.0 ")
 exception:
 pass 
 try:
 import gtk 
 import gtk.glade 
 except:
 print( "GTK is not Available")
 sys.exit(1)
 
 class PreferenceWindow:
 ui = None 
 configs = { } 
通知=なし
ウィンドウ=なし
 
 def __init __(self):
 
 pynotify.init( " nepal-loadshedding "):
 sys.exit(1)
 
 self.ui = gtk.glade.XML(" pref_ui.glade ")
 
#以前に保存した設定を取得します
 self.configs = self.parse_configs()
 
 saved_group_value = str(self.configs.get( "GROUP"))
 
 self.ui.get_widget( "text_group_number")。set_text(saved_group_value)
 
 dic = {
 "on_btn_pref_ok_clicked":se lf.on_save_preference、
 "on_btn_pref_close_clicked":self.on_close、
 "on_preference_window_destroy":self.on_quit、
} 
 
 self.ui signal_autoconnect(dic)
 
 self.windowがNoneの場合:
 self.window = self.main()
 
 def parse_configs(self) :
 self.configs = json.load(open( "config.txt"))
 return self.configs 
 
 def save_configs(self、key、value ):
 self.configs [key] = int(value)
 json.dump(self.configs、open( "config.txt"、 "wb"))
 return True 
 
 def on_save_preference(self、widget):
 group_number = self.ui.get_widget( "text_group_number")。get_text()
 self.save_configs( " GROUP "、group_number)
 
#アイコンの概要ケース
 if self.notify == None:
 self.notify = pynotify.Notificati on( "Nepal Loadshedding"、 "グループが正常に保存されました:" + group_number)
 else:
 self.notify.update( "Nepal Loadshedding"、 "グループが正常に保存されました:" + group_number) 
 self.notify.set_timeout(100)
 
 self.notify.show()
印刷 "正常に保存されました" 
 
 def on_close(self、widget):
 print 'close event called' 
 
 def on_quit(self、widget):
 sys.exit(0)
 
 def main(self):
 gtk.main()
2
Samundra
 "on_preference_window_destroy":self.on_quit、

この行はあなたの問題です。ウィンドウが破棄されると、quitメソッドが呼び出されます。ウィンドウを閉じると、ウィンドウが破棄されるため、quitメソッドが呼び出されます。

また、GTK +アプリケーションを終了するためにsys.exit(0)を呼び出さないでください。代わりにGtk.main_quit()を使用します。また、アプリケーションを古い、廃止されたpygtkバインディングを使用するのではなく、GTK +および関連ライブラリのgobject-introspectionバインディングを使用するように変換することをお勧めします。

3
dobey