diff --git a/rsstube-gtk.py b/rsstube-gtk.py
new file mode 100755
index 0000000..c3e73e7
--- /dev/null
+++ b/rsstube-gtk.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python3
+
+# very basic GUI for rsstube
+# TODO: some things that would be good...
+# - make it better in general
+# - probably rewrite rsstube interface so it can be called as a proper function
+# - support inputting multiple URLs
+# - support output as OPML
+# - copy to clipboard button
+
+import gi,subprocess,sys,pycurl
+
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+class RsstubeGtk(Gtk.Window):
+ def __init__(self):
+ super(RsstubeGtk, self).__init__()
+ self.set_title("rsstube-gtk")
+ self.set_size_request(600,250)
+
+ self.input_label = Gtk.Label()
+ self.input_label.set_text("Enter URL")
+ self.entry = Gtk.Entry()
+ self.entry.set_width_chars(60)
+
+ self.btn = Gtk.Button()
+ self.btn.set_label("Get Feed")
+ self.btn.connect("clicked",self.get_feed)
+
+ self.output_label = Gtk.Label()
+ self.output_label.set_text("")
+ self.output_label.set_selectable(True)
+ self.output_label.set_width_chars(60)
+
+ fixed = Gtk.Fixed()
+ fixed.put(self.input_label,25,25)
+ fixed.put(self.entry,25,50)
+ fixed.put(self.btn,25,100)
+ fixed.put(self.output_label,25,150)
+
+ self.add(fixed)
+ self.show_all()
+
+ self.connect("destroy", Gtk.main_quit)
+
+ # runs rsstube
+ def get_feed(self,widget):
+ error_color = "#B3589A"
+ url = self.entry.get_text()
+ feed = str(subprocess.check_output([sys.executable, "scripts/rsstube.py", url]))
+ feed = feed[:feed.rindex("\\n")]
+ feed = feed[feed.rindex("\\n")+2:]
+
+ # this color is used for error output
+ if "\\x1b[1;31m[" in feed:
+ errmsg = feed[feed.index(']')+2:]
+ errmsg = errmsg[:errmsg.rindex("\\x1b[0m")]
+ self.output_label.set_markup('' + errmsg + '')
+ else:
+ self.output_label.set_markup('' + feed + '')
+
+RsstubeGtk()
+Gtk.main()