我是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()
答案 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()