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()
我敢肯定,我有一些問題,儘可能的格式在我的代碼怎麼回事,評論,並可能命名約定,但任何脫落在我的問題光的幫助,將不勝感激。謝謝:) !
朗尼嗨調用self.set_up()來解決我的問題,可能沒人如此關心命名的問題或評論,它會干擾他們願意幫助你。但是,有兩個技巧可以幫助您更快地獲得答案:1)在問題標題中具體說明問題,而不僅僅是「我遇到問題」。 2)最小化你的代碼,直到它仍然是再現你的問題的最小程序。菜單項,提交回調等等,都只是佔用了空間並分散了真正發生的事情,並使人們不太可能閱讀你的問題。 – ptomato
感謝您的評論我真的不確定問題出在哪裏,或者問題出在哪裏,或者我會壓縮它XD 和來自java編程許多人雖然願意回答抱怨不要遵循方法和類的命名約定 –
我知道你並不總是知道問題的確切位置,但我的觀點是,在你發佈之前值得花時間找出問題。有一半時間你會通過凝聚代碼來自己找出答案! – ptomato