On Wed, 31 May 2006 00:00:32 +0300
"Ilknur Ozturk" <[EMAIL PROTECTED]> wrote:
> RE: [Tkinter-discuss] calling toplevel creating function
>
> Hi Michael,
>
> my code is below. actually the problem that I explained in my previous mail
> can be solved by using newkey() instead of self.newkey() toplevel
> definition.(but still could not understand what is the reason of the error
> message)
Hi Ilknur,
self.newkey is the name of the method that creates the Toplevel window, if you
name the window self.newkey, too,
you override the method. Now when in your self.Button_Press() method the call
to self.newkey() occurs,
you actually try to "call" the newly created Toplevel window which leads to the
error message you saw.
however, still I could not reach my aim. As you will see below, I could not
assign self.userkey which is gotten from the user on toplevel window, to the
userdefinedkey[] array. the aim is, at first click of a key should result with
a toplevel window that gets the key parameter from the user. the other press of
the same key should result by calling a different function with the parameter
taken. there are more than one such a key on my GUI. I hope, I can explain my
aim and problems:) thanks from now...
The problem here seems similar, if I understand you correctly. Each call to
self.newkey() overrides a bunch of
variable names.
I think a better approach would be to write a separate class for your dialog
window; if I understand the use
of your dialog window correctly, it is probably the best (and easiest) to use
an askstring() dialog from the
tkSimpleDialog module, e.g.:
(...)
# do not forget to make the list a class attribute first
self.userdefinedkeys = ['', '']
# define the buttons like this:
self.key1 = Button(self.mycontainer, text="Key1", command=lambda index=0 :
self.button_press(index))
(...)
def button_press(self, index):
if self.userdefinedkeys[index]:
# alternative callback here
print self.userdefinedkeys[index]
else:
self.userdefinedkeys[index] = tkSimpleDialog.askstring("Enter new
key", "Key name:")
I hope this helps
Michael
>
>
>
> from Tkinter import *
>
> root = Tk()
>
> class myentryclass:
> def __init__(self, parent):
> self.myParent = parent
> self.myParent.focus_set()
>
> self.mycontainer = Frame(parent, borderwidth=0)
> self.mycontainer.pack()
>
>
> userdefinedkeys=[]
> for i in range (2):
> userdefinedkeys.append('')
>
> button_name=self.userdefinedkeys[0]
> button_number=1
> self.key1=Button(self.mycontainer,
> command=lambda
> arg1=button_name, arg2=button_number:
> self.Button_Press(arg1, arg2)
> )
> self.key1.configure(text="key1")
> self.key1.grid(row=3, column=0)
>
> button_name=self.userdefinedkeys[1]
> button_number=2
> self.key2=Button(self.mycontainer,
> command=lambda
> arg1=button_name, arg2=button_number:
> self.Button_Press(arg1, arg2)
> )
> self.key2.configure(text="key2")
> self.key2.grid(row=3, column=1)
>
>
> def Button_Press(self, arg1, arg2):
> if arg2==1:
> if arg1=='':
> self.newkey()
> self.userdefinedkeys[0]=self.userkey
> else:
> print self.userdefinedkeys[0]
> if arg2==2:
> if arg1=='':
> self.newkey()
> self.userdefinedkeys[1]=self.userkey
> else:
> print self.userdefinedkeys[1]
>
> else:
> pass
>
> def newkey(self):
> newkey=Toplevel()
> newkey.title('Define New Key')
> newkey.geometry('250x140+500+300')
>
> self.keydef = Label(newkey, text="Key Name:")
> self.keydef.place(x=10, y=10)
> self.keyname = Entry(newkey)
> self.keyname.focus_set()
> self.keyname.place(x=90, y=10)
> confirm = Button(newkey, text="OK", width=15,
> command=self.getkeyname)
> confirm.place(x=67, y=85)
>
> def getkeyname(self):
> self.userkey=self.keyname.get()
> ## self.newkey.destroy()
> print self.userkey
> return self.userkey
>
>
> def sendcommand(self, arg1):
> print arg1
>
>
> mylittlentry = myentryclass(root)
> root.mainloop()
>
>
_______________________________________________
Tkinter-discuss mailing list
[email protected]
http://mail.python.org/mailman/listinfo/tkinter-discuss