importing class

2006-10-27 Thread gmarkowsky
Hi all,

I'm trying to import a class from a module. The class looks like this:
class App:

def __init__(self, master):

frame = Frame(master)
frame.pack()

self.button = Button(frame, text=text_1, command= self.comm_1)
self.button.pack(side=LEFT)

self.hi_there = Button(frame, text=text_2, command=self.comm_2)
self.hi_there.pack(side=LEFT)

def comm_1(self):
command1()
root.quit()

def comm_2(self):
command2()
root.quit()

It's supposed to just make a Tkinter window with two choices. The
problem is that when I import it from a module, I get the following
error:

NameError: global name 'Frame' is not defined

But when I copy and paste it into the file, it works. Can anyone tell
me what's wrong?

Greg

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: importing class

2006-10-29 Thread gmarkowsky
Yep, that fixed it. Many thanks.

Greg

Dennis Lee Bieber wrote:
> On 27 Oct 2006 09:22:00 -0700, [EMAIL PROTECTED] declaimed the
> following in comp.lang.python:
>
> > It's supposed to just make a Tkinter window with two choices. The
> > problem is that when I import it from a module, I get the following
> > error:
> >
> > NameError: global name 'Frame' is not defined
> >
> > But when I copy and paste it into the file, it works. Can anyone tell
> > me what's wrong?
> >
>   Probably the simple fact that your "file" likely has all the imports
> for Tkinter defined. The module that you are importing needs to have
> those imports inside it -- imported modules do not have visibility of
> names defined in the importING file.
> --
>   WulfraedDennis Lee Bieber   KD6MOG
>   [EMAIL PROTECTED]   [EMAIL PROTECTED]
>   HTTP://wlfraed.home.netcom.com/
>   (Bestiaria Support Staff:   [EMAIL PROTECTED])
>   HTTP://www.bestiaria.com/

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: importing class

2006-10-29 Thread gmarkowsky
Thanks, I got that part. The problem I'm still having is that it's not
seeing things like text_1, which are defined in the program. How can I
make it see that?

Another question I should ask is whether I should even bother doing
this. That is, it seems that the elegant and approved way of doing this
kind of thing may be to put a class in a module and then just use the
module over and over again in programs. I'm making a few GUIs which
present two options and ask the user to chose one, so I thought I could
just do it this way. Of course I could very easily just copy and paste
the class into each file, but that seems silly. I haven't had any
trouble using modules for functions, but for classes it is not working
right so far, and I'm having trouble finding examples to follow.

Greg

Marc 'BlackJack' Rintsch wrote:
> In <[EMAIL PROTECTED]>, gmarkowsky
> wrote:
>
> > Hi all,
> >
> > I'm trying to import a class from a module. The class looks like this:
> > class App:
> >
> > def __init__(self, master):
> >
> > frame = Frame(master)
> > frame.pack()
> >
> > self.button = Button(frame, text=text_1, command= self.comm_1)
> > self.button.pack(side=LEFT)
> >
> > self.hi_there = Button(frame, text=text_2, command=self.comm_2)
> > self.hi_there.pack(side=LEFT)
> >
> > def comm_1(self):
> > command1()
> > root.quit()
> >
> > def comm_2(self):
> > command2()
> > root.quit()
> >
> > It's supposed to just make a Tkinter window with two choices. The
> > problem is that when I import it from a module, I get the following
> > error:
> >
> > NameError: global name 'Frame' is not defined
> >
> > But when I copy and paste it into the file, it works. Can anyone tell
> > me what's wrong?
>
> Yes, the global name `Frame` is not defined.  `Frame` is a name in the
> `Tkinter` module and you have to import it to reference it.  Add the
> following import statement to your file:
>
> from Tkinter import Frame, Button
>
> You use `Button` too and this also lives in the `Tkinter` module.
> 
> Ciao,
>   Marc 'BlackJack' Rintsch

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: importing class

2006-10-30 Thread gmarkowsky
Thanks for your help. Actually my idea was that command1 and command2
would be defined within the program, not the module, as I would have
different choices in different programs. Should I pass them in as a
parameter too?

Greg

Steve Holden wrote:
> [EMAIL PROTECTED] wrote:
> > Thanks, I got that part. The problem I'm still having is that it's not
> > seeing things like text_1, which are defined in the program. How can I
> > make it see that?
> >
> Your module is intended to work with many different main programs, so it
> shouldn't make any assumptions about the names that the main program
> uses for things. That would be rather bad programming style ("rigind
> coupling" is something to be avoided where possible). I wouldn't call
> that class App just because it's misleading: maybe you could change the
> name to YesNo, or Choice, or something more indicative of its function?
>
> You could pass text_1 and text_2 as arguments to the class's __init__
> method - that way you could just use them directly.
>
> > Another question I should ask is whether I should even bother doing
> > this. That is, it seems that the elegant and approved way of doing this
> > kind of thing may be to put a class in a module and then just use the
> > module over and over again in programs. I'm making a few GUIs which
> > present two options and ask the user to chose one, so I thought I could
> > just do it this way. Of course I could very easily just copy and paste
> > the class into each file, but that seems silly. I haven't had any
> > trouble using modules for functions, but for classes it is not working
> > right so far, and I'm having trouble finding examples to follow.
> >
> Seems like parameterization is the thing you are missing. Change the
> __init__ method declaration to
>
>  def __init__(self, master, text_1="OK", text_2="Cancel"):
>  ...
>
> leaving the rest of the code the same. (Though I note your module also
> fails to define a "command1" and "command2" function, this may just be
> because you are only quoting partial code).
>
> Then in your main program create the object with
>
>  myDialog = YesNo(master, "Yes", "No")
>
> Looks like you are new to Python - perseverre and you will pick it up
> quite quickly!
>
> regards
>   Steve
> --
> Steve Holden   +44 150 684 7255  +1 800 494 3119
> Holden Web LLC/Ltd  http://www.holdenweb.com
> Skype: holdenweb   http://holdenweb.blogspot.com
> Recent Ramblings http://del.icio.us/steve.holden

-- 
http://mail.python.org/mailman/listinfo/python-list


Simple Tkinter problem

2006-11-07 Thread gmarkowsky
Hi all,

I'm trying to write a GUI that will put up multiple widgets in
succession. My problem is that each widget also contains the previous
widgets when they pop up. How do I reinitialize the widget each time so
that it doesn't contain earlier ones? Actually, another question I have
is, is there a way to set python so that it will assume any undefined
variable is 0 or ''? That is, I have several statements like "If k > 0
then so and so" and I would like it to assume k=0 unless I tell it
otherwise. I've just been defining k=0 at the start of the program but
it seems there should be a better way.

Greg

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Simple Tkinter problem

2006-11-07 Thread gmarkowsky
Here's my Tkinter class:

class TwoChoice:
def __init__(self, master):

frame = Frame(master)
frame.pack()
m = Label(root, text= maentry)
m.pack()
n = Label(root, text= fave)
n.pack()

self.button = Button(frame, text=home_team, command=
self.comm_1)
self.button.pack(side=LEFT)

self.hi_there = Button(frame, text=vis_team,
command=self.comm_2)
self.hi_there.pack(side=LEFT)

def comm_1(self):
print home_team
root.quit()

def comm_2(self):
print vis_team
root.quit()

I call it by

root = Tk()
gui= TwoChoice(root)
root.mainloop()

The next time I call it I want to just run the same thing but with
different values for the variables. Instead it gives me like two copies
of the widget.

Greg

Neil Cerutti wrote:
> On 2006-11-07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > I'm trying to write a GUI that will put up multiple widgets in
> > succession. My problem is that each widget also contains the
> > previous widgets when they pop up. How do I reinitialize the
> > widget each time so that it doesn't contain earlier ones?
>
> Show your code.
>
> > Actually, another question I have is, is there a way to set
> > python so that it will assume any undefined variable is 0 or
> > ''? That is, I have several statements like "If k > 0 then so
> > and so" and I would like it to assume k=0 unless I tell it
> > otherwise. I've just been defining k=0 at the start of the
> > program but it seems there should be a better way.
>
> The best way to do it is to never use undefined names.
> 
> -- 
> Neil Cerutti
> If only faces could talk. --Pat Summerall

-- 
http://mail.python.org/mailman/listinfo/python-list