'Window'对象没有属性'_tclCommands'

时间:2014-11-12 14:29:56

标签: python tkinter window runtime-error

我是Python的新手,我正在尝试为类创建一个需要清除屏幕或创建新窗口的代码,我已经尝试了这两个但是失败了。但除此之外,我尝试使用不同的修改运行此代码,几乎所有时间我都收到错误:' Window'对象没有属性' _tclCommands'。这个错误是什么意思?可能与此相关的另一件事是我无法专门关闭窗口,而是需要退出IDLE,错误说:' Window'对象没有属性' destroy'。我该怎么做才能解决这个问题?

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()

2 个答案:

答案 0 :(得分:1)

您可能希望从Frame继承,因为您的类缺少Tkinter小部件的一些常用方法:

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

grid()configure()尚未在您的课程中实施,对吧?所以你的问题就在于,你需要将Tkinter小部件类子类化以获得所有这些不错的方法:

    class Window(Frame):

答案 1 :(得分:0)

Idle是用Tkinter编写的,我被告知,因此在Idle中运行Tkinter程序会导致问题,即从命令行或其他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()