首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter - " LABEL“对象不可调用;不能以LABEL类命名对象。

Tkinter - " LABEL“对象不可调用;不能以LABEL类命名对象。
EN

Stack Overflow用户
提问于 2022-09-07 04:55:11
回答 1查看 46关注 0票数 0

我正在开发一个基于tkinter的应用程序。

我试图模块化我的代码,其中每个函数都有一个特定的任务要做,有些函数只需调用其他函数。

在我的示例中,我将search按钮绑定到函数search,该函数的任务是调用其他基于API的函数,如full_name

当我这样做时,会抛出一个错误,表示in search full_name() TypeError: 'Label' object is not callable

有趣的是

full_name()

  • when中没有提到创建Label类的实例--我将search按钮绑定到函数中,full_name(),它工作得很好。但是,我想将它绑定到一个将调用所有基于API的函数的函数,到目前为止,它还不能运行

下面的代码如下:

代码语言:javascript
复制
#MER for frames placement through .Grid() 

#import necessary modules
from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Image
from tkinter import messagebox
import requests
import json

root = Tk()
root.title("F1 Desktop Application")
root.geometry("500x600")
root.configure(bg="white")


#generate 2022 drivers-list [can scale to drivers-list by changing the]
drivers_list_request = requests.get("http://ergast.com/api/f1/2022/drivers.json")
#initialize empty-list
drivers_list = []
drivers_list_object = json.loads(drivers_list_request.content)

for elements in drivers_list_object["MRData"]["DriverTable"]["Drivers"]:
    drivers_list.append(elements["givenName"] + " " + elements["familyName"])

#NEED TO UNDERSTAND PRECEDENCE BETWEEN WIDTH, HEIGHT SETTING, VS SPANS. STICKY MAKES PERFECT SENSE
top_frame = LabelFrame(root, width = 300, height = 125)
top_frame.grid(row = 0, column = 0, columnspan = 2)
top_frame.rowconfigure(0, minsize = 75)
top_frame.columnconfigure(0, minsize = 300)

# Update the Entry widget with the selected item in list
def check(e):
    
    v= entry_box.get()

    if v=='':
        hide_button(menu)
    
    else:
        data=[]
        for item in drivers_list:
            if v.lower() in item.lower():
                data.append(item)
        
        update(data)
        show_button(menu)

def update(data):
   # Clear the Combobox
   menu.delete(0, END)
   # Add values to the combobox
   for value in data:
        menu.insert(END,value)
        
def fillout(event):
    
    try:
        
        entry_box.delete(0,END)
        
        entry_box.insert(0,menu.get(menu.curselection()))
        
        hide_button(menu)
        
    #handle a complete deletion of entry-box via cursor double tap
    except:
        
        pass
        
def hide_button(widget):
    widget.grid_remove()
    
def show_button(widget):
    widget.grid()
    
def full_name():
    
    user_input = entry_box.get()
    
    
    lower_user_input = user_input.lower().split(" ")[1]
    
    
    response = requests.get("http://ergast.com/api/f1/drivers/{}.json".format(lower_user_input))
    
    print(response.status_code)

    response_object = json.loads(response.content)
    
    name = response_object["MRData"]["DriverTable"]["Drivers"][0]["givenName"] + " " + response_object["MRData"]["DriverTable"]["Drivers"][0]["familyName"]
    
    print(name)



def search():
    
    full_name()
    
    

    
    
 
    
    
    #once works, then make API request




header_label = Label(top_frame, text = "F1 2022 Drivers App", font = ("Arial bold",14), bg = "white")
header_label.grid(row = 0, column = 0, padx = 30)

search_button = Button(top_frame, text = "search" , command = search)
search_button.grid(row = 1, column = 1)

entry_box= Entry(top_frame)
entry_box.grid(row = 1, column = 0)
entry_box.bind('<KeyRelease>',check)

menu= Listbox(top_frame, height = 4)
menu.grid(row = 2, column = 0)
menu.bind("<<ListboxSelect>>",fillout)






left_frame = LabelFrame(root, width = 250, height = 225, borderwidth = 0, highlightthickness = 2)
left_frame.grid(row = 1, column = 0, sticky = NW, padx = 10, pady = 15)
#left_frame.grid_propagate(False)
left_frame.rowconfigure(0, minsize = 100)
left_frame.columnconfigure(0, minsize = 200)

#left_frame_content = LabelFrame(, width = 125, height = 70)
#left_frame_content.grid(row = 1, column = 1, sticky = W)


basic_info = Label(left_frame, text = "Basic Info ", font = ("Arial bold",14))
basic_info.grid(row = 0, column = 0)

full_name = Label(left_frame, text = "Full Name :")
full_name.grid(row = 1, column = 0, sticky = W)

driver_code = Label(left_frame, text = "Driver Code : ")
driver_code.grid(row = 2, column = 0, sticky = W)

nationality = Label(left_frame, text = "Nationality : ")
nationality.grid(row = 3, column = 0, sticky = W)





bottom_left_frame = LabelFrame(root, width = 250, height = 225)
bottom_left_frame.grid(row = 2, column = 0, sticky = N, padx = 10)
bottom_left_frame.rowconfigure(0, minsize = 50)
bottom_left_frame.columnconfigure(0, minsize = 200)





F1_career = Label(bottom_left_frame, text = "F1 Career ", font = ("Arial bold",14))
F1_career.grid(row = 0, column = 0)

wins = Label(bottom_left_frame, text = "Wins :")
wins.grid(row = 1, column = 0, sticky = W)

wins.configure(text = "Wins :" + " 7")

poles = Label(bottom_left_frame, text = "Poles :")
poles.grid(row = 2, column = 0, sticky = W)

test = Label(bottom_left_frame, text = "test")
test.grid(row = 2, column = 1)

podiums = Label(bottom_left_frame, text = "Podiums :")
podiums.grid(row = 3, column = 0, sticky = W)

podiums.configure(text = "Podiums :" + "Lewis Hamilton")

drivers_championships = Label(bottom_left_frame, text = "Championships :")
drivers_championships.grid(row = 4, column = 0, sticky = W)





bottom_right_frame = LabelFrame(root, width = 250, height = 225)
bottom_right_frame.grid(row = 2, column = 1, sticky = W)

bottom_right_frame.rowconfigure(0, minsize = 50)
bottom_right_frame.columnconfigure(0, minsize = 150)

hide_button(menu)





root.mainloop()

你可以自由地要求更清晰。如果有人有理由/解决办法,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 02:18:10

您对标签使用了相同的名称:

代码语言:javascript
复制
full_name = Label(left_frame, text = "Full Name :")

因此它将覆盖full_name()

为标签使用另一个名称,例如full_name_label

代码语言:javascript
复制
full_name_label = Label(left_frame, text = "Full Name :")
full_name_label.grid(row = 1, column = 0, sticky = W)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73630303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档