468,275 Members | 1,838 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,275 developers. It's quick & easy.

tkinter wm_delete_window

hello i want to intercept tkinter python system events like
wm_delete_window
and if possible for any window, but the newest code I've produced give
me
an error :

Traceback (most recent call last):
File "C:\Documents and Settings\yvesd\Bureau\protowin.py", line 36,
in ?
b1 = Tkinter.Button (win1)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1933, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1856, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1834, in _setup
self.tk = master.tk
AttributeError: MyDlg instance has no attribute 'tk'

thanks a lot for the help answer.

here is my code :

import Tkinter
from Tkinter import *

class MyDlg(Toplevel):
def ma_fonction():
print "my function is finished."
def __init__(arg1, arg2):
arg1.protocol("WM_DELETE_WINDOW", arg1.ma_fonction)

root = Tkinter.Tk ()
#win1 = Tkinter.Toplevel (root)
win1 = MyDlg(root)
b1 = Tkinter.Button (win1)
b1.config (text="hello")

Jul 18 '06 #1
1 4272
On Tue, 18 Jul 2006 11:16:04 +0200, yvesd <yv************@gmail.comwrote:
hello i want to intercept tkinter python system events like
wm_delete_window
and if possible for any window, but the newest code I've produced give
me
an error :
Traceback (most recent call last):
File "C:\Documents and Settings\yvesd\Bureau\protowin.py", line 36,
in ?
b1 = Tkinter.Button (win1)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1933, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1856, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1834, in _setup
self.tk = master.tk
AttributeError: MyDlg instance has no attribute 'tk'
thanks a lot for the help answer.
here is my code :
import Tkinter
from Tkinter import *
Do not import the same module twice: either use "import Tkinter" and
prefix everything in it with 'Tkinter.', or use "from Tkinter import *"
and don't specify any prefix. You're mixing both here.
class MyDlg(Toplevel):
def ma_fonction():
You must specify 'self' as first parameter here. Or put 'ma_fonction'
outside the class.
print "my function is finished."
def __init__(arg1, arg2):
arg1.protocol("WM_DELETE_WINDOW", arg1.ma_fonction)
Please don't use anything else than 'self' as the name for methods' first
parameter. It will confuse everyone who knows Python. And your mistake is
here: the constructor for the super-class (Toplevel) is not called
automatically by the sub-class constructor; so you have to do it yourself.
So just rewrite these two lines as:

def __init__(self):
Toplevel.__init__(self)
self.protocol("WM_DELETE_WINDOW", self.ma_fonction)

and everything should work fine. BTW, I've removed the parameter arg2 that
you didn't use at all.
root = Tkinter.Tk ()
#win1 = Tkinter.Toplevel (root)
win1 = MyDlg(root)
Replace that with:

win1 = MyDlg()
b1 = Tkinter.Button (win1)
b1.config (text="hello")
An additional small note: you can write the last two lines as a single one:

b1 = Tkinter.Button(win1, text='hello')

And you also must call:
- b1.pack, b1.grid or b1.place to put your button somewhere in your window.
- root.mainloop() in the end or your window will never appear.

If you want to do Tkinter the OO way, you may also create the button in
the dialog's constructor.

So here would be my version of your program:

----------------------------------------------
from Tkinter import *

class MyDlg(Toplevel):
def __init__(self):
Toplevel.__init__(self)
b1 = Button(self, text='hello')
b1.pack()
self.protocol("WM_DELETE_WINDOW", self.ma_fonction)
def ma_fonction(self):
print "my function is finished."

root = Tk()
win1 = MyDlg()
root.mainloop()
----------------------------------------------

HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Jul 18 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Rob | last post: by
3 posts views Thread by DoubleM | last post: by
3 posts views Thread by Mickel Grönroos | last post: by
2 posts views Thread by Russell E. Owen | last post: by
1 post views Thread by Pekka Niiranen | last post: by
6 posts views Thread by Peter Kleiweg | last post: by
4 posts views Thread by Bob Greschke | last post: by
5 posts views Thread by half.italian | last post: by
reply views Thread by nicstel | last post: by
reply views Thread by NPC403 | last post: by
reply views Thread by zattat | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.