On 07/01/2021 08:42, Christian Gollwitzer wrote:
Am 07.01.21 um 08:29 schrieb Paulo da Silva:

Does anybody know why cmd method isn't called when I change the button
state (clicking on it) in this example?
I know that this seems a weird class use. But why doesn't it work?
Thanks.

class C:
     from tkinter import Checkbutton
     import tkinter

     @staticmethod
^^it works if you remove the staticmethod here

     def cmd():
         print("Test")


Maybe there is a bug in tkinter, that it doesn't work with static methods?

It has nothing to do with tkinter, a staticmethod object cannot be
called directly:

>>> class C:
        @staticmethod
        def cmd(): print("Hello")
        cmd()


Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    class C:
  File "<pyshell#28>", line 4, in C
    cmd()
TypeError: 'staticmethod' object is not callable

You have to go through the descriptor protocol:

>>> class C:
        @staticmethod
        def cmd(): print("Hello")


>>> C.cmd()
Hello

I recommend that the OP use a more conventional stye and do the setup
outside the class or, better, in an instance of the class.

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

Reply via email to