import os import time import threading import twitter from gi.repository import Gtk, Gdk, GObject INPUT_TEXT='twitter username' GLADE_FILE = os.path.join(os.path.dirname( __file__ ), 'layout.glade') # A worker thread to get twitter data class WorkerThread(threading.Thread): terminate = False twitter_username = None twitter_text = '' def set_buffer(self, buffer): self.buffer = buffer def run(self): while(not self.terminate): api = twitter.Api() self.twitter_text = '' if self.twitter_username != None: try: for status in api.GetUserTimeline(self.twitter_username): self.twitter_text += status.text + "\n" except: pass Gdk.threads_enter() self.buffer.set_text(self.twitter_text) Gdk.threads_leave() time.sleep(5) # The Main Window class SyrlugDemoWindow: def __init__(self): self.builder = Gtk.Builder() self.builder.add_objects_from_file(GLADE_FILE, ["syrlug_demo", "twitter_username", "twitter_text"]) self.window = self.builder.get_object("syrlug_demo") self.username_input = self.builder.get_object("twitter_username") self.username_input.set_text(INPUT_TEXT) self.worker = WorkerThread() self.worker.set_buffer(self.builder.get_object("twitter_text").get_buffer()); self.worker.start() self.builder.connect_signals(self) self.window.connect("destroy", self.close_window) self.window.show() def close_window(self, widget): self.worker.terminate = True Gtk.main_quit() def subscribe_button_clicked(self, widget): input_text = self.username_input.get_text() if input_text != INPUT_TEXT and input_text != "": self.worker.twitter_username = input_text def twitter_username_focus_in(self, widget, param): if widget.get_text() == INPUT_TEXT: widget.set_text("") #widget.set_visibility(False) def twitter_username_focus_out(self, widget, param): if widget.get_text() == "": widget.set_text(INPUT_TEXT) #widget.set_visibility(True) if __name__ == "__main__": # initialize window win = SyrlugDemoWindow() # start gtk loop Gdk.threads_init() GObject.threads_init() Gdk.threads_enter() Gtk.main() Gdk.threads_leave()