import gtk import gobject from datetime import datetime class CmdWindow: def __init__(self, status = '', starttime = None): self.starttime = starttime self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_geometry_hints(min_width = 350); self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy_event) self.entry = gtk.Entry() self.entry.connect("activate", self.activate_event) self.button = gtk.Button(stock = gtk.STOCK_OK) self.button.connect("clicked", self.activate_event) vbox = gtk.VBox() if status != '': hbox = gtk.HBox() lbl = gtk.Label(status) hbox.pack_start(lbl, expand = False) if starttime is not None: self.elapsedlabel = gtk.Label(self.getElapsed()) gobject.timeout_add(1000, self.updateElapsed) hbox.pack_end(self.elapsedlabel, expand = False) vbox.pack_start(hbox) hbox = gtk.HBox() hbox.pack_start(self.entry) hbox.pack_start(self.button, expand = False) vbox.pack_start(hbox) self.window.add(vbox) self.window.show_all() def main(self): self.text = '' gtk.main() return self.text def delete_event(self, widget, event, data=None): return False def destroy_event(self, widget, data=None): gtk.main_quit() def activate_event(self, widget, data=None): self.text = self.entry.get_text() self.window.destroy() def getElapsed(self): delta = datetime.now() - self.starttime days = delta.days dsecs = delta.seconds hours = dsecs / (60 * 60) dsecs -= hours * 60 * 60 minutes = dsecs / 60 dsecs -= minutes * 60 seconds = dsecs elapsed = '' if days > 0: elapsed = '%dd ' % days elapsed += '%d:%02d:%02d' % (hours, minutes, seconds) return elapsed def updateElapsed(self): self.elapsedlabel.set_text(self.getElapsed()) return True