learning curve
Terry Reedy
tjreedy at udel.edu
Fri Dec 28 03:26:43 EST 2012
On 12/27/2012 8:20 PM, Verde Denim wrote:
> Just getting into Py coding and not understanding why this code doesn't
> seem to do anything -
Part of your 'learning curve' should be learning to write informative
subjects lines. The above says almost nothing. For this I suggest
"Problem with classes and tkinter". In this case, you specifically need
to add the tkinter startup code; check the example in the manual. If you
do add that, you code may run, but it may required advice with someone
with tkinter expertise (and interest) beyond mind.
Also, if you are just starting, I recommend you start with 3.3 unless
you have a good reason to start with an older version. (IE, you need to
use a third party library that only runs with 2.x.)
> # File: dialog2.py
> import dialog_handler
>
> class MyDialog(dialog_handler.Dialog):
> def body(self, master):
> Label(master, text="First:").grid(row=0)
> Label(master, text="Second:").grid(row=1)
> self.e1 = Entry(master)
> self.e2 = Entry(master)
> self.e1.grid(row=0, column=1)
> self.e2.grid(row=1, column=1)
> return self.e1 # initial focus
>
> def apply(self):
> first = string.atoi(self.e1.get())
> second = string.atoi(self.e2.get())
> print first, second # or something
>
> # File: dialog_handler.py
>
> from Tkinter import *
> import os
>
> class Dialog(Toplevel):
>
> def __init__(self, parent, title = None):
> Toplevel.__init__(self, parent)
> self.transient(parent)
>
> if title:
> self.title(title)
> self.parent = parent
> self.result = None
> body = Frame(self)
> self.initial_focus = self.body(body)
> body.pack(padx=5, pady=5)
> self.buttonbox()
> self.grab_set()
>
> if not self.initial_focus:
> self.initial_focus = self
>
> self.protocol("WM_DELETE_WINDOW", self.cancel)
> self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
> parent.winfo_rooty()+50))
> self.initial_focus.focus_set()
> self.wait_window(self)
>
> #
> # construction hooks
> def body(self, master):
> # create dialog body. return widget that should have
> # initial focus. this method should be overridden
> pass
>
> def buttonbox(self):
> # add standard button box. override if you don't want the
> # standard buttons
> box = Frame(self)
>
> w = Button(box, text="OK", width=10, command=self.ok,
> default=ACTIVE)
> w.pack(side=LEFT, padx=5, pady=5)
> w = Button(box, text="Cancel", width=10,
> command=self.cancel)
> w.pack(side=LEFT, padx=5, pady=5)
>
> self.bind("<Return>", self.ok)
> self.bind("<Escape>", self.cancel)
>
> box.pack()
>
> #
> # standard button semantics
> def ok(self, event=None):
> if not self.validate():
> self.initial_focus.focus_set() # put focus back
> return
> self.withdraw()
> self.update_idletasks()
> self.apply()
> self.cancel()
>
> def cancel(self, event=None):
> # put focus back to the parent window
> self.parent.focus_set()
> self.destroy()
>
> #
> # command hooks
> def validate(self):
> return 1 # override
>
> def apply(self):
> pass # override
>
--
Terry Jan Reedy
More information about the Python-list
mailing list