2012-12-17 185 views
1

大家好我一直在學習python和pygtk我最近遇到了一個我正在嘗試編寫的小程序的問題。我遇到了pygtk的問題

當您第一次點擊托盤圖標時,我的窗口正常顯示,但在關閉窗口後,我試圖設置爲「最小化托盤」類型的事物,它不會再次打開,只顯示空白窗口而不是它最初顯示的那個。


    import os 
    import gtk 
    import gobject 
    import datepicker 
    from dateutil import relativedelta 
    import datetime 
    import numberentry 
    class ShutdownTimer: 
     tray_tooltip = '' 
     timer_visible = False 
     timerui = gtk.Window() 
     def set_tooltip(self, string): 
      self.tray_tooltip = str(string) 
     def set_visible(self, v, visible): 
     self.timer_visible = visible 
     if self.timer_visible is True: 
      self.timerui.show_all() 
     else: 
      self.timerui.hide_all() 
     def set_up(self): 
      self.timerui.set_title("Shutdown Timer") 
      self.timerui.connect("destroy", self.set_visible, False) 
      self.row_one = gtk.HBox() 
      self.combo = gtk.combo_box_new_text() 
      self.combo.append_text("Shutdown") 
      self.combo.append_text("Hibernate") 
      self.combo.append_text("Suspend/Sleep") 
      self.combo.append_text("Restart") 
      self.combo.append_text("Cancel") 
      self.combo.set_active(0) 
      self.row_one.pack_start(self.combo, False, False) 

      hlbl = gtk.Label() 
      mlbl = gtk.Label() 
      hlbl.set_text("H:") 
      mlbl.set_text("M:") 

      self.hentry = numberentry.NumberEntry() 
      self.mentry = numberentry.NumberEntry() 
      submit = gtk.Button("Submit") 
      submit.connect("clicked", self.submit_action) 

      self.row_one.pack_start(hlbl, False, False) 
      self.row_one.pack_start(self.hentry, False, False) 
      self.row_one.pack_start(mlbl, False, False) 
      self.row_one.pack_start(self.mentry, False, False) 
      self.row_one.pack_start(submit, False, False) 

      self.row_one.show_all() 

      self.timerui.add(self.row_one) 


     def submit_action(self, action): 
      task = self.combo.get_active_text() 
      hours = int(self.hentry.get_text()) 
      minus = int(self.mentry.get_text()) 
      hourm = hours * 60 
      tmins = minus + hourm 
      tseconds = tmins * 60 
      print tseconds 

      date = datetime.datetime.now() 
      print date 

      future = datetime.timedelta(seconds=tseconds) 
      total = date+future 
      print total 

      print "%s scheduled for %s" % (task, total) 
      string = task + " scheduled for " + str(total) 
      md = gtk.MessageDialog(self.timerui, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, string) 
      md.run() 
      md.destroy() 
     #print '%s - %s/%i:%i %s' % (action, date, hours, minutes, timePart) 
     #date_split = date.split("/") 
     #today = datetime.date.today(date_split[2],date_split[0], date_split[1]) 
     #rd = relativedelta(today, datetime.date()) 
     #print "Seconds to go: %(seconds)d" % rd.__dict__ 
     def on_right_click(self, shutdown, status, action): 
      menu = gtk.Menu() 

      menu_item = gtk.MenuItem("Quit") 
      menu_item.connect("activate", lambda w: gtk.main_quit()) 
      menu.append(menu_item) 
      menu_item.show() 
      menu_item = gtk.MenuItem("Show Window") 
      menu_item.connect("activate", self.set_visible, True) 
      menu.append(menu_item) 
      menu_item.show() 
      menu.popup(None, None, None, action, action) 
     def __init__(self): 
      self.status = gtk.StatusIcon() 
      home = os.getenv('HOME') 
      icon_path = home + '/.config/shutdowntimer/icons/32x32/tray_icon.png' 
      settings_path = home + '/.config/shutdowntimer/settings/' 
      self.status.set_from_file(icon_path) 
      self.status.set_visible(True) 
      self.status.connect("popup_menu", self.on_right_click) 
      self.status.connect("activate", self.set_visible, True) 
      self.set_up() 

    def main(): 
     gtk.main() 
     return 0 

    if __name__ == "__main__": 
    ShutdownTimer() 
    main() 

我敢肯定,我有一些問題,儘可能的格式在我的代碼怎麼回事,評論,並可能命名約定,但任何脫落在我的問題光的幫助,將不勝感激。謝謝:) !

+1

朗尼嗨調用self.set_up()來解決我的問題,可能沒人如此關心命名的問題或評論,它會干擾他們願意幫助你。但是,有兩個技巧可以幫助您更快地獲得答案:1)在問題標題中具體說明問題,而不僅僅是「我遇到問題」。 2)最小化你的代碼,直到它仍然是再現你的問題的最小程序。菜單項,提交回調等等,都只是佔用了空間並分散了真正發生的事情,並使人們不太可能閱讀你的問題。 – ptomato

+0

感謝您的評論我真的不確定問題出在哪裏,或者問題出在哪裏,或者我會壓縮它XD 和來自java編程許多人雖然願意回答抱怨不要遵循方法和類的命名約定 –

+0

我知道你並不總是知道問題的確切位置,但我的觀點是,在你發佈之前值得花時間找出問題。有一半時間你會通過凝聚代碼來自己找出答案! – ptomato

回答

1

對不起浪費任何人的時間,我設法在這個特定地點

def set_visible(self, v, visible): 
    self.timer_visible = visible 
    if self.timer_visible is True: 
     self.set_up() 
     self.timerui.show_all() 
    else: 
     self.timerui.hide_all()