Popular recipes tagged "pygtk"http://code.activestate.com/recipes/tags/pygtk/2011-02-19T17:50:42-08:00ActiveState Code RecipesConnect PyGTK object events to class methods automatically (Python) 2011-02-19T17:50:42-08:00Pavel Krchttp://code.activestate.com/recipes/users/4177047/http://code.activestate.com/recipes/577577-connect-pygtk-object-events-to-class-methods-autom/ <p style="color: grey"> Python recipe 577577 by <a href="/recipes/users/4177047/">Pavel Krc</a> (<a href="/recipes/tags/automate/">automate</a>, <a href="/recipes/tags/connect/">connect</a>, <a href="/recipes/tags/decorator/">decorator</a>, <a href="/recipes/tags/event/">event</a>, <a href="/recipes/tags/pygtk/">pygtk</a>). Revision 2. </p> <p>A module that allows you to not to repeat yourself (DRY) while writing typical PyGTK constructions (an object containing PyGTK widgets with its methods servicing widget events) by calling connect() automatically. See docstring.</p> Run asynchronous tasks using coroutines (Python) 2010-08-06T16:16:20-07:00Arnau Sanchezhttp://code.activestate.com/recipes/users/4173270/http://code.activestate.com/recipes/577129-run-asynchronous-tasks-using-coroutines/ <p style="color: grey"> Python recipe 577129 by <a href="/recipes/users/4173270/">Arnau Sanchez</a> (<a href="/recipes/tags/coroutine/">coroutine</a>, <a href="/recipes/tags/event/">event</a>, <a href="/recipes/tags/generator/">generator</a>, <a href="/recipes/tags/gobject/">gobject</a>, <a href="/recipes/tags/gtk/">gtk</a>, <a href="/recipes/tags/gui/">gui</a>, <a href="/recipes/tags/network/">network</a>, <a href="/recipes/tags/nonblocking/">nonblocking</a>, <a href="/recipes/tags/pygtk/">pygtk</a>). Revision 20. </p> <p>This recipe shows a simple, transparent (and hopefully pythonic) way of running asynchronous tasks when writing a event-driven application (i.e. GUI). The aim is to allow a programmer to write time-consuming functions (usually IO-bound, but not only) with sequential-looking code, instead of scattering the logic over a bunch of callbacks. We will take advantage of the coroutines introduced in Python 2.5 (see <a href="http://www.python.org/dev/peps/pep-0342" rel="nofollow">http://www.python.org/dev/peps/pep-0342</a>). </p> <p>The goal: wouldn't it be great if we could write something like this?</p> <pre class="prettyprint"><code>def myjob(entry, arg1, arg2, arg3): result1 = function_that_takes_eons_to_complete(arg1, arg2) result2 = another_function_that_downloads_a_big_really_big_file(result1, arg3) entry.set_text("The result is: %d" % result2) def on_start_button___clicked(button, entry): myjob(entry, 1, 2, 3) ... gtk.main() </code></pre> <p>Indeed, but we can't! The GUI will hang until the job is done and the user will be rightfully angry. Coroutines to the rescue: the absolute minimal change we can make to this code is transforming <em>myjob</em> into a coroutine and yield every time we do blocking stuff:</p> <pre class="prettyprint"><code>def myjob(entry, arg1, arg2, arg3): result1 = yield some_task(arg1, arg2) result2 = yield some_other_task(result1, arg3) entry.set_text("The result is: %d" % result2) def on_start__clicked(button, entry): start_job(myjob(entry, 1, 2, 3)) </code></pre> <p><em>some_task</em> and <em>some_other_task</em> are here the asynchronous implementation of the sequential tasks used in the first fragment, and <em>start_job</em> the wrapper around the coroutine. Note that we still have to implement non-blocking versions of the tasks, but they are usually pretty generic (wait some time, download a file, ...) and can be re-used. If you happen to have a CPU-bound function or even a IO-bound code you cannot split (<em>urllib2</em> anyone?), you can always use a generic threaded task (granted, the whole point of using co-routines should be avoiding threads, but there is no alternative here).</p> <p>At the end, all the plumbing we need to make it work is just 1 function: <em>start_job</em> (wrapper around the job to manage the flow of the coroutine). The rest of the code -two asynchronous tasks (<em>sleep_task</em>, <em>threaded_task</em>) and a demo app- are shown solely as an example.</p> Generic flash-videos downloader using webkit (Python) 2010-04-04T11:56:25-07:00Arnau Sanchezhttp://code.activestate.com/recipes/users/4173270/http://code.activestate.com/recipes/577167-generic-flash-videos-downloader-using-webkit/ <p style="color: grey"> Python recipe 577167 by <a href="/recipes/users/4173270/">Arnau Sanchez</a> (<a href="/recipes/tags/download/">download</a>, <a href="/recipes/tags/flash/">flash</a>, <a href="/recipes/tags/gtk/">gtk</a>, <a href="/recipes/tags/pygtk/">pygtk</a>, <a href="/recipes/tags/webkit/">webkit</a>). </p> <p>This recipe shows how to build a generic resource logger of webpages using PyGtkWebkit. The demo code implements a generic downloader for flash-video sites.</p> unset engine in gtkrc; unset widget style in gtk (Python) 2009-07-13T06:51:51-07:00Dima Tisnekhttp://code.activestate.com/recipes/users/4068698/http://code.activestate.com/recipes/576840-unset-engine-in-gtkrc-unset-widget-style-in-gtk/ <p style="color: grey"> Python recipe 576840 by <a href="/recipes/users/4068698/">Dima Tisnek</a> (<a href="/recipes/tags/engine/">engine</a>, <a href="/recipes/tags/gtkp/">gtkp</a>, <a href="/recipes/tags/gtkrc/">gtkrc</a>, <a href="/recipes/tags/pixbuf/">pixbuf</a>, <a href="/recipes/tags/pygtk/">pygtk</a>, <a href="/recipes/tags/rc/">rc</a>, <a href="/recipes/tags/rcstyle/">rcstyle</a>, <a href="/recipes/tags/style/">style</a>, <a href="/recipes/tags/theme/">theme</a>). </p> <p>Example shows how to unset gtk engine'd look for a particular widget.</p> <p>gtk.Widget.modify_xx allows you to override simple properties, like backgrounds (unless theme uses an engine) and text color (sometimes (?)) gtkrc allows you to override most properties for all or selected widgets, like sizes, faces, and so on. some parts of widget appearance are set through engine stanzas in gtkrc, these can be unset too, if you know how...</p> <p>here it is!</p> Printing with Python and pyGTK (Python) 2009-06-25T13:54:34-07:00Mark Muzenhardthttp://code.activestate.com/recipes/users/4170846/http://code.activestate.com/recipes/576820-printing-with-python-and-pygtk/ <p style="color: grey"> Python recipe 576820 by <a href="/recipes/users/4170846/">Mark Muzenhardt</a> (<a href="/recipes/tags/drawingarea/">drawingarea</a>, <a href="/recipes/tags/gtk/">gtk</a>, <a href="/recipes/tags/print/">print</a>, <a href="/recipes/tags/pygtk/">pygtk</a>). Revision 2. </p> <p>PyGTK is a very powerful GUI-Toolkit. Nearly everything is well documented, except how to print. I messed around for hours just to solve this problem so I decided to share this cool piece of code!</p> simple pygtk Calculator (Python) 2009-01-20T21:07:35-08:00mohsen javidhttp://code.activestate.com/recipes/users/4168857/http://code.activestate.com/recipes/576623-simple-pygtk-calculator/ <p style="color: grey"> Python recipe 576623 by <a href="/recipes/users/4168857/">mohsen javid</a> (<a href="/recipes/tags/calculator/">calculator</a>, <a href="/recipes/tags/pygtk/">pygtk</a>). </p> <p>this is a simple calculator maked whith python and gtk.</p> pyGTK threading (Python) 2009-04-01T07:07:56-07:00oohay_email2004http://code.activestate.com/recipes/users/4169723/http://code.activestate.com/recipes/576705-pygtk-threading/ <p style="color: grey"> Python recipe 576705 by <a href="/recipes/users/4169723/">oohay_email2004</a> (<a href="/recipes/tags/pygtk/">pygtk</a>, <a href="/recipes/tags/threading/">threading</a>). Revision 2. </p> <p>This is my first successful attempt at threading in pyGTK.</p> <p>Suggestions please.</p> Pseudo threads with generators and PyGTK/gnome-python (Python) 2004-11-05T06:33:06-08:00Arjan Molenaarhttp://code.activestate.com/recipes/users/1729855/http://code.activestate.com/recipes/327082-pseudo-threads-with-generators-and-pygtkgnome-pyth/ <p style="color: grey"> Python recipe 327082 by <a href="/recipes/users/1729855/">Arjan Molenaar</a> (<a href="/recipes/tags/pygtk/">pygtk</a>, <a href="/recipes/tags/threads/">threads</a>). </p> <p>A thread-like interface for those who want to "use" threads in Python with PyGTK. I use it when loading files and display a nice progress bar. The function or method you give to GIdleThread should "yield" every now and then. This makes it simpler to write code, since you do not have to care about nasty locks.</p>