2014-11-12 1 views
-1

Я новичок в Python и пытаюсь создать код для класса, который должен либо очистить экран, либо сделать новые окна, которые я пробовал, но неудачно провалился. Но кроме того, я попытался запустить этот код с различными модификациями, и почти все время я получаю ошибку: объект «Window» не имеет атрибута «_tclCommands». Что означает эта ошибка? Еще одна вещь, которая может быть связана с этим, заключается в том, что я не могу закрыть окно конкретно, но вместо этого нужно выйти из IDLE, ошибка говорит: «Объект Window» не имеет атрибута «destroy». Что я могу сделать, чтобы исправить это?Объект 'Window' не имеет атрибута '_tclCommands'

from tkinter import * 
import time 
import os 

background_color = 'SlateGray' 
text_background_color = 'DarkViolet' 

class Window: 
    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 
     self.configure(background = background_color) 

    def create_widgets(self): 
     self.button = Button(self, text = "Clear", command = clear_screen()) 
     self.button.grid(row = 1, column = 1) 

    def clear_screen(self): 
     self.Frame.grid_forget() 



root = Tk() 
root.configure(background = background_color) 
root.title("Guess Your Birthday") 
app = Window(root) 
root.mainloop() 
+0

что _tclCommand? – Mozzie

+0

Я понятия не имею, поэтому я спрашиваю –

+0

, где это происходит? вы пробовали отладку? – Mozzie

ответ

0

Idle написана с Tkinter Я сказал, и поэтому запуск программы Tkinter в Idle может вызвать проблемы, т.е. запустить его из командной строки или другой IDE. Есть много проблем с вашей программой, и легче создать рабочую программу, чем переходить каждую ошибку индивидуально. Сайт Effbot является хорошим местом, чтобы начать обучение Tkinter, как это имеет простые примеры для каждого виджета http://effbot.org/tkinterbook/

class Window: 
    def __init__(self, master): 
     self.fr=Frame(master) 
     self.fr.grid() 
     self.create_widgets() 
     background_color = 'SlateGray' 
     text_background_color = 'DarkViolet' 
     self.fr.configure(background = background_color) 

     self.tl=Toplevel(master) 
     Button(self.tl, text = "Remove TopLevel", 
       command=self.clear_tl).grid(row = 1, column = 2) 

    def create_widgets(self): 
     self.button = Button(self.fr, text = "Clear Frame", 
          command=self.clear_screen) 
     self.button.grid(row = 1, column = 1) 

    def clear_screen(self): 
     self.fr.grid_forget() 

    def clear_tl(self): 
     self.tl.destroy() ## removes the window 

root=Tk()  
##root.configure(background = background_color) 
root.title("Guess Your Birthday") 
app = Window(root) 
root.mainloop() 
1

Вы, вероятно, хотите, чтобы наследовать от Frame, потому что ваш класс отсутствуют некоторые из наиболее распространенных методов еще Tkinter виджет:

self.grid() 
    self.create_widgets() 
    self.configure(background = background_color) 

grid() и configure() еще не реализованы в вашем классе, не так ли? Так что там лежит вашу проблему, вам нужно создать подкласс Tkinter класс виджета иметь все эти хорошие методы:

class Window(Frame): 
Смежные вопросы