首页 > 解决方案 > Python: TypeError: 'Label' object is not callable

问题描述

from PIL import Image, ImageTk
from tkinter import *
from tkinter import Label

def open_window():
    menu = Toplevel(root)
    menu.geometry("800x800")
    menu.title("my game's menu")
    menu.resizable(False, False)
    menu.geometry("800x800")
    lbl = Label(menu, text ="Hello!").pack

    menu.mainloop()


root = Tk()
root.geometry("400x300")
Label = Label(root, text="Are you ready?")
Label.pack()


root.title("quick question")


btn = Button(root, text="Yes", command= open_window)
btn.pack(padx=20, pady = 20)
root.mainloop()

I got this error while I was working on previously seen code: File "C:\Users\User\Desktop\naujas zaidimas\scratch.py", line 11, in open_window lbl = Label(menu, text ="Hello!").pack TypeError: 'Label' object is not callable

Does anyone know why/how to fix it?

标签: python-3.xtkinter

解决方案


该代码有许多相当明显的错误和一个隐蔽的错误

此导入在当前代码中不起作用

from PIL import Image, ImageTk

不是导入 tkinter 的好方法或首选方法

这将在以后引起问题

from tkinter import *

这对于当前的 inport 方法是不必要的

from tkinter import Label

def open_window():

Python 函数的规则是:在函数中创建的名称保留在函数中。

它需要一条global指令才能在您的代码中的其他地方提供“菜单”

menu = Toplevel(root)
menu.geometry("800x800")
menu.title("my game's menu")
menu.resizable(False, False)

重复几何指令

menu.geometry("800x800")

此对象已被定义为 Label 对象,因此尝试命名它会引发TypeError

lbl = Label(menu, text ="Hello!").pack()

这是不必要的,因为root.mainloop()已经执行

menu.mainloop()

root = Tk()
root.geometry("400x300")

这是另一个由选择的导入方法引起的命名问题

Label = Label(root, text="Are you ready?")
Label.pack()
root.title("quick question")

此按钮将使您能够创建许多Toplevel窗口

问题是,它们都将被称为“菜单”!?

这是阴险的错误

btn = Button(root, text="Yes", command= open_window)
btn.pack(padx=20, pady = 20)
root.mainloop()
# This solution avoids all the previous problems

import tkinter as tk

root = tk.Tk()
root.title("quick question")
root.geometry("400x300")

tk.Label(root, text = "Are you ready?").pack()
# This will give tkinter time to process the given instructions.
root.update()

menu = tk.Toplevel(root)
# withdraw will make menu temporarily invisible
menu.withdraw()

menu.title("my game's menu")
menu.geometry("800x800")
menu.resizable(False, False)

tk.Label(menu, text = "Hello!").pack()
# command will now make menu window visible
btn = tk.Button(root, text = "Yes", command = menu.deiconify)
btn.pack(padx = 20, pady = 20)

root.mainloop()

推荐阅读