Display is not capable of DPMS
это не ошибка, это просто предупреждение, ваш код будет работать в любом случае. Ваша настоящая проблема здесь в том, что вы не mainloop
набираете права tk.Root
.
Возможно, вы застряли в бесконечной рекурсии, потому что вы инициализируете объект Root
в рамках инициализации Root
object.
class Root(Tk):
def __init__(self):
super().__init__()
# you are initializing another Root object here!
root = Root()
# that will itself initialize another Root object,
# and that will itself initialize another Root object, etc.
root.mainloop() # this statement will never be reached
То, что вы на самом деле хотите, - это вызов mainloop
для вновь созданного Root
объекта. В методе __init__
этот вновь созданный объект - просто self
. Этот код должен работать так, как вы ожидаете.
class Root(Tk):
def __init__(self):
super().__init__()
self.title("Tkinter Button")
self.minsize(640,400)
self.wm_iconbitmap('icon.ico')
button = Button(self, text = "Click Me")
button.grid(column = 0, row = 0)
self.mainloop()
Также попробуйте просто запустить mainloop
извне самого объекта, это обычно нежелательно делать в самой инициализации объекта Tkinter
# remove self.mainloop() from Root.__init__ first
root = Root()
root.mainloop() # better
Примечание: вы написали
super(Root, self),__init__()
с запятой вместо точки, которая должна поднять
NameError
при создании экземпляра
Root
. Правильный синтаксис для инициализации объекта с родительским классом:
super(Root, self).__init__()
Или просто с использованием современного синтаксиса
super().__init__()