<div class="gmail_quote">On Mon, Dec 13, 2010 at 11:51 AM, Rance Hall <span dir="ltr">&lt;<a href="mailto:ranceh@gmail.com">ranceh@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

When I learned FORTRAN years ago they didn&#39;t teach us OOP or what I<br>
like to call Class based programming.<br></blockquote><div><br></div><div>That must have been a few years ago, then ;)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


since then I&#39;ve sort of always fallen back to be a procedural<br>
programmer with lots of functions.<br></blockquote><div><br></div><div>There&#39;s nothing really wrong with a lot of functions, and that also highlights one of the great advantages of Python - you can still program procedurally or using any other type of paradigm, more or less.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Python and the tkinter (Tkinter on Versions &lt; 3) seem like a great way<br>
to write cross platform GUI apps for small light duty apps.<br></blockquote><div><br></div><div>Perfect, really. You can quickly throw a nice little GUI together with few problems. And there are other people doing some <a href="http://www.ellogon.org/~petasis/tcl/TkRibbon/images/TkRibbon-Default.png">rather nice</a> things with Tkinter.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I&#39;ve tried to wrap my head around class based programming before and<br>
it didn&#39;t take.  But it appears I&#39;m going to have to try again as I<br>
can not find any tkinter samples that use a procedural approach.  I&#39;m<br>
finding it very difficult to understand what I need to get from<br>
tkinter because the classes are getting in the way and I&#39;m not seeing<br>
what I need to see.<br>
<br>
Is there something about class based programming that GUI apps prefer<br>
to work better in? </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Does anyone have or know of a good tutorial or explanation of class<br>
based coding that I could have a run at?</blockquote><div><br></div><div>I&#39;m not aware of any specific tutorials, but I&#39;ll try to answer your question and give a bit of an explanation. </div><div><br></div><div>First, if you&#39;re used to writing plenty of functions, you&#39;re about halfway to OOP. The only real difference between what you do already (using functions) and using classes is on a conceptual level. Classes can be defined as a collection of data and functions that operate on that data.</div>

<div><br></div><div>Think back to a program that you&#39;ve written with several related functions. Perhaps you wrote something with several records that you may have stored in a list or array or some such. So you may write a function called get_new_record() that gets data for a record, either from the user or somewhere else. Then you might have an update_record() function that modifies a given record. And perhaps even a delete_record(). You could think for a few minutes and come up with the rudimentary functions, I&#39;m sure.</div>

<div><br></div><div>Now, instead of thinking about them as either lists inside a list or a series of data elements stored in a list, imagine those records really are &quot;things&quot; - objects that can stand alone. And you can tell that record that you want to modify it, or you want it displayed some certain way, or any number of things. The hardest part about OOP is deciding how much responsibility an object really should have. Anyhow, that&#39;s all OOP is - just taking the related functions that you would normally write and sticking them inside a class. So instead of:</div>

<div><br></div><div>[&#39;somename&#39;, &#39;somedata&#39;, &#39;anothername&#39;, &#39;more data&#39;, &#39;no name&#39;, &#39;&#39;]</div><div><br></div><div>you could have</div><div><br></div><div>[record1, record2, record3]</div>

<div><br></div><div>which you could modify the __repr__/__string__ methods to print out however you want.</div><div><br></div><div>If you haven&#39;t made the link yet, GUIs tend to be objects because it&#39;s just easier to think of them that way. If you have a (real life) bottle, you can open the lid, close the lid, put stuff in, take it out, or throw it in the garbage. It&#39;s a lot easier to think of a text entry box as something you can put text in, or get text out of, or &lt;insert analogy here&gt;.</div>

<div><br></div><div>It&#39;s a different way of thinking about programming that begins feeling entirely natural because we, as humans, are used to talking about things that can do stuff and we can do stuff with. You might have hedge clippers that have certain attributes - number and sharpness of blades, for instance. They also have a function that you can .open() them and .close() them. But if you close them with something inside they will .cut() the object you place inside the clippers.</div>

<div><br></div><div>Alan Gauld (frequent contributor of this list) has a tutorial on OOP at <a href="http://alan-g.me.uk/">http://alan-g.me.uk/</a> that has some pretty solid examples about class-based programming.</div>
<div>
<br></div><div>Of course, this discussion wouldn&#39;t be complete without telling you that it is quite possible (using Tkinter especially) to actually adhere to procedural programming. You could do something like this:</div>

<div><br></div><div>import Tkinter as tk</div><div><br></div><div>def buttonclicked():</div><div>    print &quot;Yay, you clicked me!&quot;</div><div><br></div><div>root = tk.Tk()</div><div>button = tk.Button(root, text=&#39;Click me!&#39;, command=buttonclicked)</div>

<div>button.pack()</div><div><br></div><div>root.mainloop()</div><div><br></div><div>If you&#39;re more comfortable with procedural programming you can certainly do it that way, but you&#39;ll probably find it a lot easier to spend some time getting used to the concept of OOP and writing your GUI programs in a class-based fashion.</div>

<div><br></div><div>HTH,</div><div>Wayne</div><div><br></div><meta http-equiv="content-type" content="text/html; charset=utf-8"></div>