<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>tkinter &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/tkinter/</link>
	<description>Feed of posts on WordPress.com tagged "tkinter"</description>
	<pubDate>Wed, 02 Dec 2009 12:05:05 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[PDFme]]></title>
<link>http://pdfme.wordpress.com/2009/11/07/pdfme/</link>
<pubDate>Sat, 07 Nov 2009 12:55:17 +0000</pubDate>
<dc:creator>onurtuna</dc:creator>
<guid>http://pdfme.wordpress.com/2009/11/07/pdfme/</guid>
<description><![CDATA[PDFme is an open source project that you do anything with pdf files.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>PDFme is an open source project that you do anything with pdf files.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[TKinter]]></title>
<link>http://binarysoup.wordpress.com/2009/11/03/tkinter/</link>
<pubDate>Tue, 03 Nov 2009 01:57:34 +0000</pubDate>
<dc:creator>binarysoup</dc:creator>
<guid>http://binarysoup.wordpress.com/2009/11/03/tkinter/</guid>
<description><![CDATA[So, up until this point I&#8217;ve been tinkering with TKinter, the python graphics module. Coming f]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>So, up until this point I&#8217;ve been tinkering with TKinter, the python graphics module. Coming from someone who had only used the Zell graphics package up until that point, TKinter is spectacularly awesome! I know it&#8217;s not exactly the most extensive graphics package ever made, but it really does have some interesting features. I was particularly impressed with how easy it is to use. You usually expect something like this to be overly complex and near impossible to read. (Anyone that has ever tried to code a Java GUI by hand will understand this.) TKinter, even on the most basic level, is straight forward and simple.</p>
<p>I&#8217;ve been writing a python Paint program. Just to see what it could do. I don&#8217;t really expect to ever finish it but it was quite the learning experience. With just the documentation, I managed to navigate through most of the built-in classes and even played around with events and mouse clicks. The entire process was more or less: Think of what I want to do, look for a wigit class, create the wigit. Done.</p>
<p>Next Project: Figure out what Visual Studio does.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Simple GUI with Python and TKinter]]></title>
<link>http://ourcraft.wordpress.com/2009/10/22/simple-gui-with-python-and-tkinter/</link>
<pubDate>Thu, 22 Oct 2009 12:39:14 +0000</pubDate>
<dc:creator>danielmeyer</dc:creator>
<guid>http://ourcraft.wordpress.com/2009/10/22/simple-gui-with-python-and-tkinter/</guid>
<description><![CDATA[It would be nice to have a way to build quick-n-dirty GUIs so I can GUI-enable tools when that makes]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>It would be nice to have a way to build quick-n-dirty GUIs so I can GUI-enable tools when that makes sense&#8230; but I&#8217;ve always just had a mental block about &#8220;going to that length&#8221;.</p>
<p>Yesterday though, I was flipping through <em>Python in a Nutshell</em> and I saw a GUI example there (p. 329) that was so simple I typed it in and tried it out :</p>
<pre class="brush: python;">
import sys, Tkinter
Tkinter.Label(text=&#34;Welcome!&#34;).pack()
Tkinter.Button(text=&#34;Exit&#34;, command=sys.exit).pack()
Tkinter.mainloop()
</pre>
<p>That yields a simple little dialog:</p>
<p><a href="http://ourcraft.wordpress.com/files/2009/10/hellotk-1.png"><img class="alignnone size-full wp-image-2106" title="hellotk-1" src="http://ourcraft.wordpress.com/files/2009/10/hellotk-1.png" alt="hellotk-1" width="123" height="76" /></a></p>
<p>&#8230;that can be resized:</p>
<p><a href="http://ourcraft.wordpress.com/files/2009/10/hellotk-2.png"><img class="alignnone size-full wp-image-2107" title="hellotk-2" src="http://ourcraft.wordpress.com/files/2009/10/hellotk-2.png" alt="hellotk-2" width="391" height="214" /></a></p>
<p>I need to try some more of this!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Link For more python Tk information]]></title>
<link>http://spidezad.wordpress.com/2009/10/11/link-for-more-python-tk-information/</link>
<pubDate>Sun, 11 Oct 2009 11:54:22 +0000</pubDate>
<dc:creator>spidezad</dc:creator>
<guid>http://spidezad.wordpress.com/2009/10/11/link-for-more-python-tk-information/</guid>
<description><![CDATA[http://python.org/doc/life-preserver/index.html]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://python.org/doc/life-preserver/index.html">http://python.org/doc/life-preserver/index.html</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Making GUI component appear/disappear]]></title>
<link>http://spidezad.wordpress.com/2009/10/07/making-gui-component-appeardisappear/</link>
<pubDate>Wed, 07 Oct 2009 13:42:11 +0000</pubDate>
<dc:creator>spidezad</dc:creator>
<guid>http://spidezad.wordpress.com/2009/10/07/making-gui-component-appeardisappear/</guid>
<description><![CDATA[    def AE_appear(self):         if on:             if not self.AE_optionbar.winfo_ismapped():      ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>    def AE_appear(self):<br />
        if on:</p>
<p>            if not self.AE_optionbar.winfo_ismapped():<br />
                self.AE_optionbar.pack(side=&#8217;left&#8217;, padx = 10, pady = 1,fill=&#8217;both&#8217;)</p>
<p>            else:#turn off</p>
<p>              if self.AE_optionbar.winfo_ismapped():<br />
                            self.AE_optionbar.pack_forget()</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tkinter: Dialogs to open multiple files]]></title>
<link>http://spidezad.wordpress.com/2009/10/05/tkinter-dialogs-to-open-multiple-files/</link>
<pubDate>Mon, 05 Oct 2009 14:00:39 +0000</pubDate>
<dc:creator>spidezad</dc:creator>
<guid>http://spidezad.wordpress.com/2009/10/05/tkinter-dialogs-to-open-multiple-files/</guid>
<description><![CDATA[import Tkinter, tkFileDialog try: root = Tkinter.Tk() root.withdraw() files = tkFileDialog.askopenfi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><span style="font-size:x-small;">import Tkinter, tkFileDialog</p>
<p>try:</p>
<p>root = Tkinter.Tk()</p>
<p>root.withdraw()</p>
<p>files = tkFileDialog.askopenfilenames(parent = root,multiple =1)</p>
<p>finally:</p>
<p>root.destroy()</p>
<p></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Passing variables with StringVar, aesthetic Tkinter work]]></title>
<link>http://biostumblematic.wordpress.com/2009/03/05/passing-variables-with-stringvar-aesthetic-tkinter-work/</link>
<pubDate>Thu, 05 Mar 2009 20:43:10 +0000</pubDate>
<dc:creator>jwinget</dc:creator>
<guid>http://biostumblematic.wordpress.com/2009/03/05/passing-variables-with-stringvar-aesthetic-tkinter-work/</guid>
<description><![CDATA[More work on gpdbcleaner. Today has been one of those sessions where I feel like I&#8217;m learning ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>More work on gpdbcleaner.  Today has been one of those sessions where I feel like I&#8217;m learning by leaps and bounds.</p>
<p>I changed the GUI to use the &#8220;grid&#8221; layout manager.  This just seems cleaner than the &#8220;pack&#8221; manager.  I also added message widgets which return the filenames being worked on (the PDB file to open and the save file name).</p>
<p>Along the way I learned about StringVar().  This allowed me to dynamically update the filenames as they were altered by the user, and I can finally pass the filenames between functions!  I got rid of the clunky global file list I was using before.</p>
<p>I&#8217;ve also modified the &#8220;Open&#8221; button to perform two functions.  The first is the same as before, to set the filename.  The second reads in a listing of all record names in the PDB file.  This is in preparation for an expansion in which I&#8217;ll let the user choose which record names to include in the &#8220;Clean&#8221; file.</p>
<p>Here is a screenshot of what the program looks like these days:<br />
<div id="attachment_38" class="wp-caption alignleft" style="width: 505px"><img src="http://biostumblematic.wordpress.com/files/2009/03/gpdbcleaner_0305.png" alt="gpdbcleaner interface" title="gpdbcleaner_0305" width="495" height="129" class="size-full wp-image-38" /><p class="wp-caption-text">gpdbcleaner interface</p></div></p>
<p>And here is the source code:</p>
<pre class="brush: python;">
#!/usr/bin/python

# http://biostumblematic.wordpress.com

import sys, re, tkFileDialog, string
from Tkinter import *

recordnames = []

class Gpdbcleaner:
    def __init__(self, root):
        '''Set up the TKinter window'''
        frame = Frame(root)
        frame.pack(fill=BOTH)

        self.openbutton = Button(frame, text='Select PDB file', command=self.openfile)
        self.openbutton.grid(row=0, sticky=W)

        self.openfilename = StringVar()
        self.openfilename.set('')

        self.openfile = Label(frame, width=50, relief=SUNKEN, anchor=W, textvariable=self.openfilename)
        self.openfile.grid(row=0, column=1, sticky=W)

        self.savefilename = StringVar()
        self.savefilename.set('')

        self.savebutton = Button(frame, text='Save As', command=self.asksaveasfilename)
        self.savebutton.grid(row=1, sticky=W)

        self.savefile = Label(frame, width=50, relief=SUNKEN, anchor=W, textvariable=self.savefilename)
        self.savefile.grid(row=1, column=1, sticky=W)

        self.runbutton = Button(frame, text='Run', fg='green', command=self.run)
        self.runbutton.grid(row=2, sticky=W)

        self.quitbutton = Button(frame, text='Quit', fg='red', command=frame.quit)
        self.quitbutton.grid(row=2, column=1, sticky=W)

    def openfile(self):
        self.askopenfilename()
        self.getrecordnames()

    def askopenfilename(self):
        '''Get the name of the PDB file to be cleaned up'''
        dirtyfile = tkFileDialog.askopenfilename()
        self.openfilename.set(dirtyfile)

    def asksaveasfilename(self):
        '''Get the save as file name'''
        cleanfile = tkFileDialog.asksaveasfilename()
        self.savefilename.set(cleanfile)

    def getrecordnames(self):
        '''Create a list of all the record names in the PDB file'''
        filetoopen = self.openfilename.get()
        inputfile = open(filetoopen, 'r')
        lines = inputfile.readlines()
        for line in lines:
            recordmatch = re.match('^\S*', line)
            record = recordmatch.group()
	    if record in recordnames:
	        pass
	    else:
	        recordnames.append(record)
        inputfile.close()

    def run(self):
        '''Perform the cleanup'''
        atomrecords=[]
        filetoopen = self.openfilename.get()
        inputfile = open(filetoopen, 'r')
        lines = inputfile.readlines()
        for line in lines:
            match = re.search('^ATOM', line)
            if match:
                atomrecords.append(line)
            else:
                pass
        atomrecords.append('END')
        inputfile.close()

        # Write out the records
        filetowrite = self.savefilename.get()
        outputfile = open(filetowrite, 'w')
        outputfile.writelines(atomrecords)
        outputfile.close()

root = Tk()
root.title('PDB cleaner')

gpdbcleaner = Gpdbcleaner(root)

root.mainloop()
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[My first working python program with a GUI]]></title>
<link>http://biostumblematic.wordpress.com/2009/03/04/my-first-working-python-program-with-a-gui/</link>
<pubDate>Wed, 04 Mar 2009 17:15:27 +0000</pubDate>
<dc:creator>jwinget</dc:creator>
<guid>http://biostumblematic.wordpress.com/2009/03/04/my-first-working-python-program-with-a-gui/</guid>
<description><![CDATA[I still don&#8217;t completely understand the way functions interact with one another, but here is w]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I still don&#8217;t completely understand the way functions interact with one another, but here is working code for the PDB cleaner with a very basic TKinter GUI.</p>
<pre class="brush: python;">
#!/usr/bin/python

# http://biostumblematic.wordpress.com

import sys, re, tkFileDialog
from Tkinter import *

filelist=[]

class Gpdbcleaner:
    def __init__(self, root):
        '''Set up the TKinter window'''
        frame = Frame(root)
        frame.pack()

        self.openbutton = Button(frame, text='Select PDB file', command=self.askopenfilename)
        self.openbutton.pack(side=LEFT)

        self.savebutton = Button(frame, text='Save As', command=self.asksaveasfilename)
        self.savebutton.pack(side=LEFT)

        self.runbutton = Button(frame, text='Run', fg='green', command=self.run)
        self.runbutton.pack(side=LEFT)

        self.quitbutton = Button(frame, text='Quit', fg='red', command=frame.quit)
        self.quitbutton.pack(side=LEFT)

    def askopenfilename(self):
        '''Get the name of the PDB file to be cleaned up'''
        dirtyfile = tkFileDialog.askopenfilename()
        return filelist.append(dirtyfile)

    def asksaveasfilename(self):
        '''Get the save as file name'''
        cleanfile = tkFileDialog.asksaveasfilename()
        return filelist.append(cleanfile)

    def run(self):
        '''Perform the cleanup'''
        atomrecords=[]
        inputfile = open(filelist[0], 'r')
        lines = inputfile.readlines()
        for line in lines:
            match = re.search('^ATOM', line)
            if match:
                atomrecords.append(line)
            else:
                pass
        atomrecords.append('END')
        inputfile.close()

        # Write out the records
        outputfile = open(filelist[1], 'w')
        outputfile.writelines(atomrecords)
        outputfile.close()

root = Tk()

gpdbcleaner = Gpdbcleaner(root)

root.mainloop()
</pre>
<p>Next step: making the program more powerful and flexible.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cross 'n' Not using Tkinter]]></title>
<link>http://wordiac.wordpress.com/2009/03/03/cross-n-not-using-tkinter/</link>
<pubDate>Tue, 03 Mar 2009 13:52:19 +0000</pubDate>
<dc:creator>merinux</dc:creator>
<guid>http://wordiac.wordpress.com/2009/03/03/cross-n-not-using-tkinter/</guid>
<description><![CDATA[Me and Kaushani were reading the tutorials on Tkinter (its a GUI module in python for those who don]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Me and Kaushani were reading the tutorials on Tkinter (its a GUI module in python for those who don&#8217;t know) and we thought of writing a simple Cross&#8217;n'Not game using that.We are just so called &#8216;Bathroom Coders&#8217;(plz don&#8217;t take the literal meaning) and so our code might seem a little inappreciable to the regular coders.Therefore, we firmly welcome recommendations,comments and suggestions wherever needed.</p>
<p>Here&#8217;s the code for<a title="Cross 'n' Not V0.0" href="http://snipt.net/kay_emel/cross-n-not-using-tkinter" target="_blank"> </a><a title="Cross 'n' Not V0.0" href="http://snipt.net/kay_emel/cross-n-not-using-tkinter" target="_blank">Cross &#8216;n&#8217; Not V0.1 </a> or you can even download from the link given at he bottom of the post.</p>
<p>P.S. Few exceptions will be raised when you terminate the application.Kindly bear with it as we are currently working on it and will come up with a better version very soon .Suggestions are always welcomed.</p>
<p><a href="http://github.com/m3Ryn/cross--n--not/tree/master" target="_blank">DOWNLOAD</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[What python lacks]]></title>
<link>http://uberpython.wordpress.com/2009/02/06/what-python-lacks/</link>
<pubDate>Fri, 06 Feb 2009 12:54:19 +0000</pubDate>
<dc:creator>ubershmekel</dc:creator>
<guid>http://uberpython.wordpress.com/2009/02/06/what-python-lacks/</guid>
<description><![CDATA[I do like python a lot, but I feel some things are still missing. Correct me if I&#8217;m wrong. * H]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I do like python a lot, but I feel some things are still missing. Correct me if I&#8217;m wrong.</p>
<p>* How do I know what can I import? I can use help(os) but how do I know that &#8216;os&#8217; exists (from within the interpreter). I want a command like dir that can searche through the default import directories. &#8220;mdir&#8221; (like module dir) or &#8220;pdir&#8221; (package dir).<br />
* Tkinter sucks, why isn&#8217;t wx or anything else included?<br />
* The php documentation really makes me jealous because the user contributed comments are VERY useful. Why doesn&#8217;t python docs have some web 2.0 in it? Like digg&#8217;s comment system.<br />
* So many crappy IDE&#8217;s, I can&#8217;t find one that&#8217;s good for everything. At first I liked Wing but nowadays it&#8217;s way too slow and heavy so I switched to SPE which is great except it can crash for no reason.<br />
* The GIL needs to be taken more seriously with a dedicated page explaining why it&#8217;s in place, how to escape it&#8217;s suckiness, and a roadmap to minimize the damage. Alot of people care about performance more than idiot-proof concurrency.</p>
<p>And I think i have a few more rants to go on about this, I&#8217;ll post &#8216;em when I recall.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tkinter.Entry widget validation]]></title>
<link>http://paperrobot.wordpress.com/2009/01/11/tkinterentry-widget-validation/</link>
<pubDate>Sun, 11 Jan 2009 02:45:41 +0000</pubDate>
<dc:creator>paperrobot</dc:creator>
<guid>http://paperrobot.wordpress.com/2009/01/11/tkinterentry-widget-validation/</guid>
<description><![CDATA[Great post on entry widget validation. It&#8217;s not well documented so this is a useful bookmark i]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Great post on entry widget validation.  It&#8217;s not well documented so this is a useful bookmark if you have to do any validation ever.</p>
<p><a href="http://mail.python.org/pipermail/tkinter-discuss/2006-August/000863.html">You can read it here.</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Python - Right-click edit menu widget.]]></title>
<link>http://paperrobot.wordpress.com/2008/12/24/python-right-click-edit-menu-widget/</link>
<pubDate>Wed, 24 Dec 2008 06:45:12 +0000</pubDate>
<dc:creator>paperrobot</dc:creator>
<guid>http://paperrobot.wordpress.com/2008/12/24/python-right-click-edit-menu-widget/</guid>
<description><![CDATA[As I code more and more GUIs for home and work I find that I use a lot of entry widgets for manipula]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>As I code more and more GUIs for home and work I find that I use a lot of entry widgets for manipulating data and getting user input.   And every time I build an entry widget I think, wouldn&#8217;t it be nice to have a right-click edit menu so I can paste or whatnot from the mouse.  With each new app I&#8217;d do it all over again, making this simple right click menu widget, at first really as a way to reinforce what I&#8217;ve learned in Python so I could make sure fundamental techniques stuck in my mind.  </p>
<p>Well its stuck, I&#8217;m sure of it, and I&#8217;ve gotten tired of reinventing the wheel so I slapped together this quick class.  The code below does an import on Tix.  I use Tix because I prefer its native notebook widget to PMWs, but that&#8217;s another story.  However, if you don&#8217;t like Tix just replace all instances of that word with Tkinter and it&#8217;ll work fine because Tix inherits everything from Tkinter to begin with.  I haven&#8217;t tested it in text widgets yet.</p>
<p>The class itself is pretty trivial but perhaps some people will find it useful and maybe even novices will find something interesting in it.  If anything this is my way of contributing back to the interwebs all the nuggets of knowledge it has graciously given me.  If you find any bugs or have any suggestions to improve this please let me know!  </p>
<p>Thanks!<br />
PR.</p>
<p>Edit: Removed needless return statements.</p>
<pre class="brush: python;">
import Tix

class RightClickMenu(object):
    &quot;&quot;&quot;
    Simple widget to add basic right click menus to entry widgets.

    usage:

    rclickmenu = RightClickMenu(some_entry_widget)
    some_entry_widget.bind(&quot;&lt;3&gt;&quot;, rclickmenu)

    If you prefer to import Tkinter over Tix, just replace all Tix
    references with Tkinter and this will still work fine.
    &quot;&quot;&quot;
    def __init__(self, parent):
        self.parent = parent
        # bind Control-A to select_all() to the widget.  All other
        # accelerators seem to work fine without binding such as
        # Ctrl-V, Ctrl-X, Ctrl-C etc.  Ctrl-A was the only one I had
        # issue with.
        self.parent.bind(&quot;&lt;Control-a&gt;&quot;, lambda e: self.select_all(), add='+')
        self.parent.bind(&quot;&lt;Control-A&gt;&quot;, lambda e: self.select_all(), add='+')
    def __call__(self, event):
        # if the entry widget is disabled do nothing.
        if self.parent.cget('state') == Tix.DISABLED:
            return
        # grab focus of the entry widget.  this way you can see
        # the cursor and any marking selections
        self.parent.focus_force()
        self.build_menu(event)
    def build_menu(self, event):
        menu = Tix.Menu(self.parent, tearoff=0)
        # check to see if there is any marked text in the entry widget.
        # if not then Cut and Copy are disabled.
        if not self.parent.selection_present():
            menu.add_command(label=&quot;Cut&quot;, state=Tix.DISABLED)
            menu.add_command(label=&quot;Copy&quot;, state=Tix.DISABLED)
        else:
            # use Tkinter's virtual events for brevity.  These could
            # be hardcoded with our own functions to immitate the same
            # actions but there's no point except as a novice exercise
            # (which I recommend if you're a novice).
            menu.add_command(
                label=&quot;Cut&quot;,
                command=lambda: self.parent.event_generate(&quot;&lt;&lt;Cut&gt;&gt;&quot;))
            menu.add_command(
                label=&quot;Copy&quot;,
                command=lambda: self.parent.event_generate(&quot;&lt;&lt;Copy&gt;&gt;&quot;))
        # if there's string data in the clipboard then make the normal
        # Paste command.  otherwise disable it.
        if self.paste_string_state():
            menu.add_command(
                label=&quot;Paste&quot;,
                command=lambda: self.parent.event_generate(&quot;&lt;&lt;Paste&gt;&gt;&quot;))
        else:
            menu.add_command(label=&quot;Paste&quot;, state=Tix.DISABLED)
        # again, if there's no marked text then the Delete option is disabled.
        if not self.parent.selection_present():
            menu.add_command(label=&quot;Delete&quot;, state=Tix.DISABLED)
        else:
            menu.add_command(
                label=&quot;Delete&quot;,
                command=lambda: self.parent.event_generate(&quot;&lt;&lt;Clear&gt;&gt;&quot;))
        # make things pretty with a horizontal separator
        menu.add_separator()
        # I don't know of if there's a virtual event for select all though
        # I did look in vain for documentation on -any- of Tkinter's
        # virtual events.  Regardless, the method itself is trivial.
        menu.add_command(label=&quot;Select All&quot;, command=self.select_all)
        menu.post(event.x_root, event.y_root)
    def select_all(self):
        self.parent.selection_range(0, Tix.END)
        self.parent.icursor(Tix.END)
        # return 'break' because, for some reason, Control-a (little 'a')
        # doesn't work otherwise.  There's some natural binding that
        # Tkinter entry widgets want to do that send the cursor to Home
        # and deselects.
        return 'break'
    def paste_string_state(self):
        &quot;&quot;&quot;Returns true if a string is in the clipboard&quot;&quot;&quot;
        try:
            # this assignment will raise an exception if the data
            # in the clipboard isn't a string (such as a picture).
            # in which case we want to know about it so that the Paste
            # option can be appropriately set normal or disabled.
            clipboard = self.parent.selection_get(selection='CLIPBOARD')
        except Tix.TclError:
            return False
        return True

if __name__ == '__main__':
    root = Tix.Tk()
    root.geometry(&quot;156x65&quot;)
    Tix.Label(root, text=&quot;Right mouse click in\nthe entry widget below:&quot;).pack()
    entry_w = Tix.Entry(root)
    entry_w.pack()
    rclick = RightClickMenu(entry_w)
    entry_w.bind(&quot;&lt;3&gt;&quot;, rclick)
    root.mainloop()
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[interface básica]]></title>
<link>http://rafapinheiro.wordpress.com/2008/12/22/interface-basica/</link>
<pubDate>Mon, 22 Dec 2008 15:36:37 +0000</pubDate>
<dc:creator>Rafael Pinheiro</dc:creator>
<guid>http://rafapinheiro.wordpress.com/2008/12/22/interface-basica/</guid>
<description><![CDATA[Nesse post não vou ensinar como fazer interface gráfica no python, mas simplesmente como abrir dialo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Nesse post não vou ensinar como fazer interface gráfica no python, mas simplesmente como abrir dialogs para não dependermos da linha de comando.</p>
<p>Dialogs são aquelas janelinhas de informação ou erro que abrem como pop-ups.</p>
<p>Usaremos a interface gráfica padrão do python para isso, o Tkinter</p>
<p>A primeira coisa a se fazer é importar essa biblioteca, usamos o comando import:</p>
<pre class="brush: python;">
import Tkinter
</pre>
<p>Agora vamos importar mais duas bibliotecas para fazer o dialog. A biblioteca tkMessageBox para mensagens e a tkSimpleDialog para os inputs:</p>
<pre class="brush: python;">
import tkMessageBox
import tkSimpleDialog
</pre>
<p>O código a seguir serve para iniciar a interface gráfica, não vou me apofundar muito pois não é o objetivo. Se quiser saber mais sobre Tkinter existe um tutorial <a href="http://www.pythonbrasil.com.br/moin.cgi/PensandoEmTkinter" target="_blank">aqui</a>.</p>
<pre class="brush: python;">
root = Tkinter.Tk()
</pre>
<p>Esse próximo comando é opcional, quando inicializamos a interface gráfica é criada uma janela por padrão. Se quisermos esconder essa janela que não vamos utilizar basta essa linha:</p>
<pre class="brush: python;">
root.withdraw()
</pre>
<p>Agora podemos começar a lógica do nosso programa, que está no <a href="http://rafapinheiro.wordpress.com/2008/12/20/programa-com-input/" target="_blank">post anterior</a>.</p>
<pre class="brush: python;">
nome = tkSimpleDialog.askstring('Nome', 'Qual o seu nome?')
</pre>
<p>Aqui substituímos o raw_input pelo tkSimpleDialog, observe que usamos tkSimpleDialog.askstring, o askstring indica o tipo que queremos receber, ask significa perguntar em inglês, então: perguntar string. As opções são: askstring, askfloat, askinteger e outras opções mais avançadas para arquivos, cores, etc.</p>
<p>Novamente passamos parâmetros entre parênteses, o primeiro é o título da janela e o segundo a pergunta.</p>
<p style="text-align:left;">
<div id="attachment_65" class="wp-caption aligncenter" style="width: 246px"><img class="size-full wp-image-65" title="askstring" src="http://rafapinheiro.wordpress.com/files/2008/12/askstring.png" alt="askstring no Gnome(Linux)" width="236" height="129" /><p class="wp-caption-text">askstring no Gnome(Linux)</p></div>
<p style="text-align:left;">Agora que já recebemos o nome, temos que dar que dar um oi:</p>
<pre class="brush: python;">
tkMessageBox.showinfo(&quot;Nome&quot;, &quot;Oi &quot; + nome)
</pre>
<p style="text-align:left;">Mantendo a mesma ordem dos parâmetros(título, mensagem) usamos a opção showinfo do tkMessageBox. Novamente temos outras opçoes além de showinfo: showwarning, showerror e outras.</p>
<p style="text-align:left;">Os nomes dos comandos fazem sentido se você tiver um conhecimento básico de inglês, isso pode facilitar bastante o aprendizado.</p>
<p style="text-align:left;">Assim concluímos o nosso programa, mas devemos seguir mais alguns passos para que ele rode sem apresentar erros, utilizando as duas primeiras linhas do arquivo que servem para configurações especiais:</p>
<p style="text-align:left;">Para evitar erros é bom declara a codificação do nosso programa, por razões de compatibilidade com vários idiomas e sistemas operacionais recomendo usar utf-8(unicode), para saber mais sobre isso olhe na <a href="http://pt.wikipedia.org/wiki/UTF-8" target="_blank">wikipédia</a>.A declaração é feita através da seguinte linha adicionada na primeira ou segunda linha do arquivo:</p>
<pre class="brush: python;">
# -*- encoding: utf-8 -*-
</pre>
<p style="text-align:left;">Usuários Linux ainda tem que adicionar mais uma linha para poder executar clicando diretamente no ícone(sem precisar do terminal), essa linha indica que deve ser aberto com o interpretador do python:</p>
<pre class="brush: python;">
#!/usr/bin/env python
</pre>
<p style="text-align:left;">Agora nosso programa está completo, eis o código:</p>
<pre class="brush: python;">
#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import Tkinter
import tkMessageBox
import tkSimpleDialog

root = Tkinter.Tk()
root.withdraw()

nome = tkSimpleDialog.askstring('Nome','Qual o seu nome?')
tkMessageBox.showinfo(&quot;Nome&quot;, &quot;Oi &quot; + nome)
</pre>
<p style="text-align:left;">Salvem em um arquivo, no linux a extensão não é importante. Mas no windows devemos salvar como .pyw, antes estávamos salvando como .py.</p>
<p style="text-align:left;">A exensão .pyw impede que o python abra o shell(linha de comando), assim sua aplicação é inteiramente gráfica.</p>
<p style="text-align:left;">No linux você deve dar permissão de execução e quando der dois cliques vai ter as opções para executar com terminal, sem terminal e ver o código-fonte:</p>
<p style="text-align:left;"><img class="aligncenter size-full wp-image-69" title="abrindo-py" src="http://rafapinheiro.wordpress.com/files/2008/12/abrindo-py.png" alt="abrindo-py" width="460" height="118" /></p>
<p style="text-align:left;">No windows os dois cliques vão executar o programa abrindo ou não o terminal de acordo com a extensão.</p>
<p style="text-align:left;">
<p style="text-align:left;">
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[POP3 Mail Saver 0.4 (new) / 0.x]]></title>
<link>http://sid93.wordpress.com/2008/09/15/pop3-mail-saver-04-new-0x/</link>
<pubDate>Mon, 15 Sep 2008 17:50:26 +0000</pubDate>
<dc:creator>SiD</dc:creator>
<guid>http://sid93.wordpress.com/2008/09/15/pop3-mail-saver-04-new-0x/</guid>
<description><![CDATA[Ho rilasciato le nuove versioni di questo programma, con parziali ritocchi e medofiche al codice. Ne]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ho rilasciato le nuove versioni di questo programma, con parziali ritocchi e medofiche al codice.</p>
<p><strong><span style="color:#ff6600;">New Features</span></strong></p>
<blockquote><p>~ Codice sistemato.<br />
~Log modificato con l&#8217;aggiunta dell&#8217;user.<br />
~Modificati alcuni alert e nuova label con il numero mail in arrivo.<br />
~Nuovi cursori per gli entry.</p></blockquote>
<p>Puoi scaricarlo da qui:</p>
<p><a href="http://cyber-sec.helloweb.eu/files/pop3-mail-saver-v04.zip">http://cyber-sec.helloweb.eu/files/pop3-mail-saver-v04.zip</a></p>
<p><em>Vedi di più <a href="http://blacklight.gotdns.org/forum/viewtopic.php?p=21457#21457">QUI</a></em></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[PYTHON: TKinter video tutorials for beginners!]]></title>
<link>http://openbytes.wordpress.com/2008/09/11/python-tkinter-video-tutorials-for-beginners/</link>
<pubDate>Thu, 11 Sep 2008 11:46:22 +0000</pubDate>
<dc:creator>openbytes</dc:creator>
<guid>http://openbytes.wordpress.com/2008/09/11/python-tkinter-video-tutorials-for-beginners/</guid>
<description><![CDATA[Article by GoblinRFD More of a link than an article.  I have always wanted to do a video tutorial, a]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Article by GoblinRFD</strong></p>
<p>More of a link than an article.  I have always wanted to do a video tutorial, and always had other things to do.  I stumbled recently across an email highlighting two tutorials for using TKinter (a set of functions for creating GUI&#8217;s with Python)</p>
<p>Dont be put off by the lackluster voice, these are very good and full credit to the creator for making them.  They take the user from the base level of TKinter and explains (very well) the basic principles.</p>
<p>These two videos were created by a guy called Shawn, and it would be nice, if you find them useful to send him a quick message to say thanks!</p>
<p>I will hopefully be adding more of these tutorials as they are highlighted to me.</p>
<p><a href="http://showmedo.com/videos/series?name=pythonShawnTkinterSeries">Click here for the videos!</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Python and public/private key encryption]]></title>
<link>http://jintoreedwine.wordpress.com/2008/07/05/python-and-publicprivate-key-encryption/</link>
<pubDate>Sun, 06 Jul 2008 03:46:56 +0000</pubDate>
<dc:creator>jintoreedwine</dc:creator>
<guid>http://jintoreedwine.wordpress.com/2008/07/05/python-and-publicprivate-key-encryption/</guid>
<description><![CDATA[Edit (7/20/08): If you are looking to get PyCrypto running under Windows with Python 2.5 I wrote a s]]></description>
<content:encoded><![CDATA[Edit (7/20/08): If you are looking to get PyCrypto running under Windows with Python 2.5 I wrote a s]]></content:encoded>
</item>
<item>
<title><![CDATA[a step a little ahead, gui with python/Tk]]></title>
<link>http://fengshaun.wordpress.com/2008/07/02/a-step-a-little-ahead-gui-with-pythontk/</link>
<pubDate>Wed, 02 Jul 2008 18:57:06 +0000</pubDate>
<dc:creator>fengshaun</dc:creator>
<guid>http://fengshaun.wordpress.com/2008/07/02/a-step-a-little-ahead-gui-with-pythontk/</guid>
<description><![CDATA[I just started to write a very very VERY simple phonebook for my own use. This is just a quick note,]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I just started to write a very very VERY simple phonebook for my own use.  This is just a quick note, and I will keep you posted with snippets here and there.  <a href="http://showmedo.com/videos/video?name=pythonShawnTkinter1&#38;fromSeriesID=58">this link</a> helped me get through understanding how I would go about doing it.  Anyway, I&#8217;ll get started now, will post snippets whenever possible!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Python - Mia semplice calcolatrice con gui]]></title>
<link>http://bytefuck.wordpress.com/2008/05/18/python-mia-semplice-calcolatrice-con-gui/</link>
<pubDate>Sun, 18 May 2008 09:46:59 +0000</pubDate>
<dc:creator>BytE-FucK</dc:creator>
<guid>http://bytefuck.wordpress.com/2008/05/18/python-mia-semplice-calcolatrice-con-gui/</guid>
<description><![CDATA[Tratto dal topic del forum deathcodez.com #### Importa la libreria necessaria per la GUI #### from T]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Tratto dal topic del forum deathcodez.com</p>
<p><!--more--></p>
<p><code>#### Importa la libreria necessaria per la GUI ####<br />
from Tkinter import *<br />
#### Importa la libreria necessaria per la GUI ####</p>
<p>#### Funzioni per le operazioni ####</p>
<p>def add(): # Addizione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) + int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def sot(): # Sottrazione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) - int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def mol(): # Moltiplicazione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) * int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def div(): # Divisione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) / int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
#### Importa la libreria necessaria per la GUI ####<br />
from Tkinter import *<br />
#### Importa la libreria necessaria per la GUI ####</p>
<p>#### Funzioni per le operazioni ####</p>
<p>def add(): # Addizione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) + int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def sot(): # Sottrazione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) - int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def mol(): # Moltiplicazione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) * int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>def div(): # Divisione<br />
ris.delete(1.0,END) # Cancella il contenuto della text<br />
a = num1.get(1.0,END) # Prende il testo nella prima text<br />
b = num2.get(1.0,END) # Stessa cosa,solo che la seconda text<br />
ris.insert(END,int(a) / int(b)) # Inserisce nella text il result <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>#### Funzioni per le operazioni ####</p>
<p>#### Passo per dichiarare la tk e il frame principale ####<br />
tk = Tk()<br />
tk.title(”BPy-Calc”)<br />
f = Frame(tk,bg=”black”,height=1200,width=1200)<br />
f.pack()<br />
#### Passo per dichiarare la tk e il frame principale ####</p>
<p>#### Configura i pulsanti per + - / * e le text ####<br />
num1 = Text(f,pady=1,bg=”black”,fg=”blue”,height=1,width=20) # Il primo numero<br />
num2 = Text(f,bg=”black”,fg=”blue”,height=1,width=20) # Il secondo numero<br />
ris = Text(f,bg=”black”,fg=”blue”,height=1,width=20) # Il risultato</p>
<p>add = Button(f,bg=”black”,fg=”blue”,command=add,text=”Addiziona”)<br />
sot = Button(f,bg=”black”,fg=”blue”,command=sot,text=”Sottrai”)<br />
mol = Button(f,bg=”black”,fg=”blue”,command=mol,text=”Moltiplica”)<br />
div = Button(f,bg=”black”,fg=”blue”,command=div,text=”Dividi”)<br />
#### Configura i pulsanti per + - / * e le text ####</p>
<p>#### Aggiunge i pulsanti e setta la posizione ####<br />
add.pack(padx=50,pady=1)<br />
sot.pack(padx=20,pady=1)<br />
mol.pack(padx=30,pady=1)<br />
div.pack(padx=40,pady=1)<br />
#### Aggiunge i pulsanti e setta la posizione ####</p>
<p>#### Aggiunge le text e setta la posizione ####<br />
num1.pack(side=”top”,pady=20)<br />
num2.pack(side=”top”,pady=20)<br />
ris.pack(side=”top”,pady=20)<br />
#### Aggiunge le text e setta la posizione ####</p>
<p>#### Inizializza la GUI ####<br />
f.mainloop()<br />
#### Inizializza la GUI ####<br />
#### Funzioni per le operazioni ####</p>
<p>#### Passo per dichiarare la tk e il frame principale ####<br />
tk = Tk()<br />
tk.title(”BPy-Calc”)<br />
f = Frame(tk,bg=”black”,height=1200,width=1200)<br />
f.pack()<br />
#### Passo per dichiarare la tk e il frame principale ####</p>
<p>#### Configura i pulsanti per + - / * e le text ####<br />
num1 = Text(f,pady=1,bg=”black”,fg=”blue”,height=1,width=20) # Il primo numero<br />
num2 = Text(f,bg=”black”,fg=”blue”,height=1,width=20) # Il secondo numero<br />
ris = Text(f,bg=”black”,fg=”blue”,height=1,width=20) # Il risultato</p>
<p>add = Button(f,bg=”black”,fg=”blue”,command=add,text=”Addiziona”)<br />
sot = Button(f,bg=”black”,fg=”blue”,command=sot,text=”Sottrai”)<br />
mol = Button(f,bg=”black”,fg=”blue”,command=mol,text=”Moltiplica”)<br />
div = Button(f,bg=”black”,fg=”blue”,command=div,text=”Dividi”)<br />
#### Configura i pulsanti per + - / * e le text ####</p>
<p>#### Aggiunge i pulsanti e setta la posizione ####<br />
add.pack(padx=50,pady=1)<br />
sot.pack(padx=20,pady=1)<br />
mol.pack(padx=30,pady=1)<br />
div.pack(padx=40,pady=1)<br />
#### Aggiunge i pulsanti e setta la posizione ####</p>
<p>#### Aggiunge le text e setta la posizione ####<br />
num1.pack(side=”top”,pady=20)<br />
num2.pack(side=”top”,pady=20)<br />
ris.pack(side=”top”,pady=20)<br />
#### Aggiunge le text e setta la posizione ####</p>
<p>#### Inizializza la GUI ####<br />
f.mainloop()<br />
#### Inizializza la GUI ####</code></p>
<p>Come vedete l’ho commentata per una maggiore comprensione…<br />
byez</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Python] Creare una gui]]></title>
<link>http://bytefuck.wordpress.com/2008/05/17/python-creare-una-gui/</link>
<pubDate>Sat, 17 May 2008 19:16:00 +0000</pubDate>
<dc:creator>BytE-FucK</dc:creator>
<guid>http://bytefuck.wordpress.com/2008/05/17/python-creare-una-gui/</guid>
<description><![CDATA[Un semplice video che mostra come creare una semplicissima gui con le Tkinter. Buona visione]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Un semplice video che mostra come creare una semplicissima gui con le Tkinter.<!--more--></p>
<p>Buona visione <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/7Mxg0G6jNpc&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/7Mxg0G6jNpc&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Terlilit Ular]]></title>
<link>http://pebbie.wordpress.com/2008/05/16/terlilit-ular/</link>
<pubDate>Fri, 16 May 2008 06:35:07 +0000</pubDate>
<dc:creator>pebbie</dc:creator>
<guid>http://pebbie.wordpress.com/2008/05/16/terlilit-ular/</guid>
<description><![CDATA[Tadinya mau nulis judul tergigit atau keracunan bisa ular, tapi berhubung ular yang dimaksud tidak m]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Tadinya mau nulis judul tergigit atau keracunan bisa ular, tapi berhubung ular yang dimaksud tidak menggigit atau berbisa jadinya diganti deh. Ular yang dimaksud membunuh mangsanya dengan cara melilit dan menelan bulat-bulat. Anda tahu? </p>
<p>kalau Anda menjawab <a href="http://en.wikipedia.org/wiki/Pythonidae">python</a>, Anda boleh bersyukur masih memiliki ingatan tentang biologi umum. </p>
<p>Sebetulnya tulisan kali ini tidak membicarakan tentang biologi tapi masih tentang pemrogaman. Sudah beberapa hari ini saya sedang asik ngoprek memrogram dengan menggunakan bahasa <a href="http://www.python.org">python</a>. Awalnya memang hanya karena pada beberapa tulisan terakhir yang menyinggung menggunakan opencv menggunakan python yang memudahkan dalam melakukan eksplorasi fitur citra yang dilanjutkan dengan mencoba menggunakan modul lainnya (GUI).</p>
<p>Memrogram antarmuka grafis (GUI) menggunakan python bisa langsung menggunakan pustaka bawaan yaitu <a href="http://www.python.org/doc/life-preserver/">Tkinter</a> yang memanfaatkan Tcl/Tk. Pustaka ini lumayan mudah digunakan, namun dokumentasi yang saya temukan sangat sedikit (kurang pada aspek tertentu yang saya perlukan). Akhirnya saya melirik ke pustaka lain yaitu <a href="http://www.wxpython.org">wxPython</a> yang merupakan <em>wrapper</em> dari GUI Toolkit bernama wxWidget/wxWindows. Pada awalnya wxPython tampak lebih kompleks namun ternyata cara pakainya lebih terstruktur (lebih bersih) dibandingkan Tkinter. Satu hal lagi mengenai kelebihan wxPython adalah cara pakainya mirip dengan VCL pada delphi yang selama ini saya gunakan.</p>
<p>Kembali ke bahasa python, bahasa ini memang seperti deskripsinya dalam konteks biologi yaitu tidak berbisa dan membunuh mangsanya secara perlahan. Dibandingkan dengan bahasa lain yang sebangsa (Ruby) yang tampak lebih bersinar/berkilau (populer) di kalangan pengguna linux (mungkin karena python bersifat <em>copyrighted</em> walaupun sama-sama gratis dan open-source). Python cenderung hanya disukai oleh segelintir orang namun cukup dominan dalam cakupan yang spesifik (seperti Google dengan <a href="http://code.google.com/appengine">AppEngine</a>-nya dan <a href="http://www.blender.org">Blender</a>). Alasan saya ketika memilih python adalah karena sintaksnya yang <em>clean</em> sehingga enak dibaca Khususnya menghilangkan redundansi <strong>begin</strong>-<strong>end</strong> yang ada di Pascal/Delphi yang mulai terasa gatal seperti yang terjadi pada LISP. </p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
