Tkinter code (with pmw) executing to soon please help

Peter Otten __peter__ at web.de
Sun Jan 14 09:33:58 EST 2007


Eric_Dexter at msn.com wrote:

> Scott David Daniels wrote:
>> Gabriel Genellina wrote:
>> >... So `callback` should return a function, like this:
>> >
>> > def callback(text):
>> >   def handler(event):
>> >     print text
>> >
>>
>> Even better than that:
>>      def callback(text):
>>          def handler(event):
>>              print text
>>          return handler
>>
>> Otherwise callback returns the spectacularly un-useful value None.

> C:\dex_tracker\csdlist.py bay-at-night.csd
> Traceback (most recent call last):
>  File "C:\dex_tracker\csdlist.py", line 58, in
> root.mainloop()
>  File "C:\Python25\lib\lib-tk\Tkinter.py", line 1023, in mainloop
> self.tk.mainloop(n)
>  File "../../..\Pmw\Pmw_1_2\lib\PmwBase.py", line 1751, in __call__
>  File "../../..\Pmw\Pmw_1_2\lib\PmwBase.py", line 1777, in _reporterror
> TypeError: unsupported operand type(s) for +: 'type' and 'str'
> Script terminated.
> 
> It doesn't like the return handler part of it.

Probably because a Tkinter.Button command callback doesn't accept any
arguments. Try

def callback(text):
    def handler():
        print text
    return handler

Note that 'make_callback' would be a better name than 'callback' because the
function 'callback' actually creates the callback (called 'handler').

Peter





More information about the Python-list mailing list