AttributeError:“函数”对象没有属性“ img”

时间:2020-09-05 21:04:25

标签: python-3.x tkinter

我正在尝试执行if elif语句,以使用tkinter在多个帧中显示项目。第一帧只是带有每个状态的单选按钮的标准帧,用于选择要查看其状态信息的状态。当您单击“获取状态信息”按钮时,它将把状态数据填充到状态信息框架中,并将状态标志填充到状态标志框架中。这些标志正确显示,但是执行代码时出现以下错误。

错误:

Exception in Tkinter callback

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "dir\WIP.py", line 297, in getstateinfo
    alflag()
  File "dir\WIP.py", line 283, in alflag
    show()
  File "dir\WIP.py", line 276, in show
    show=show.img
AttributeError: 'function' object has no attribute 'img'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "dir\WIP.py", line 314, in getstateinfo
    show.img
AttributeError: 'function' object has no attribute 'img'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "dir\WIP.py", line 305, in getstateinfo
    show.img
AttributeError: 'function' object has no attribute 'img'

您如何解决上述问题。 请注意,DIR是我的代码存储在PC上的位置。我已经掩盖了。

代码:

#imports
from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from functools import partial
import webbrowser
import tkinter as tk

from PIL import Image, ImageTk
from PIL import ImageTk
from PIL import Image
import os

#create window object
window=Tk()
window.configure(background='black')

#define windown title
window.title("Useful information about each state of the United States of America")

#define frames
#define state selection frame
f0=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f0.grid(row=0, column=1)

#define exit frame
f1=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f1.grid(row=3, column=1, sticky=E)

#define state flag description frame
f4=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f4.grid(row=1, column=1, sticky=W)

#define state flag image frame
f2=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f2.grid(row=2, column=1, sticky=W)

#define US graphics frame
f3=Frame(window, padx=12, bd=12, bg="black", width=600, height=300, relief=RIDGE)
f3.grid(row=0, column=0)

#define state flag description frame
f6=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f6.grid(row=1, column=0, sticky=W)

#define results frame
f5=Frame(window, padx=12, bd=12, width=600, height=300, relief=RIDGE)
f5.grid(row=2, column=0, sticky=W)

#define results frame
f7=Frame(window, padx=12, bd=12, width=600, height=200, relief=RIDGE)
f7.grid(row=3, column=0, sticky=W)

#define exit app
def exitapp():
    exitmsg=messagebox.askyesno("Exit Program","Do you want to exit the program?")
    if exitmsg>0:
        window.destroy()
        return

#define reset input and output
def resetinout():
    resetinout=inputvalue.set("")
    resetinout=var.set(0)
    o1.delete('1.0', END)
    o1.insert(END,
    "INSTRUCTIONS:\n1) Select the radio button from the State list above\n2) Click on the Get State 
Info Button\n")
    for widget in f2.winfo_children():
            widget.destroy()

#define about
def about():
    messagebox.showinfo('About the useful information for each state in the USA',
    'Created by:\nMy Name\ninfo\ninfo\ninfo')
    
#define menubar
menu = Menu(window)
window.config(menu=menu)

file = Menu(menu)
file.add_command(label='Exit', command=exitapp)
menu.add_cascade(label='File', menu=file)

help = Menu(menu)
help.add_command(label='About', command=about)
menu.add_cascade(label='Help', menu=help)

#define labels
l1=Label(f0, text="Select a State:", bg= 'blue', fg='white', font='times 24 bold')
l1.grid(row=0,column=0)

l2=Label(f4, text="State Flag:", bg= 'white', fg='black', font='times 24 bold')
l2.grid(row=0,column=0)

l2=Label(f6, text="State Information:", bg= 'white', fg='black', font='times 24 bold')
l2.grid(row=0,column=0)

#define entries
#input value
inputvalue=StringVar()
window.val = StringVar()
var=IntVar()
window.var=IntVar()

#define radio buttons

window.r1=Radiobutton(f0, text="Alabama", variable=var, value=1, 
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=1, sticky=W)

window.r2=Radiobutton(f0, text="Alaska", variable=var, value=2, 
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=2, sticky=W)

window.r3=Radiobutton(f0, text="Arizona", variable=var, value=3,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=3, sticky=W)

window.r4=Radiobutton(f0, text="Arkansas", variable=var, value=4,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=4, sticky=W)

window.r5=Radiobutton(f0, text="California", variable=var, value=5,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=5, sticky=W)

window.r6=Radiobutton(f0, text="Colorado", variable=var, value=6,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=6, sticky=W)

window.r7=Radiobutton(f0, text="Connecticut", variable=var, value=7,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=7, sticky=W)

window.r8=Radiobutton(f0, text="Delaware", variable=var, value=8,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=8, sticky=W)

window.r9=Radiobutton(f0, text="Florida", variable=var, value=9,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=9, sticky=W)

window.r10=Radiobutton(f0, text="Georgia", variable=var, value=10,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=1, row=10, sticky=W)

window.r11=Radiobutton(f0, text="Hawaii", variable=var, value=11,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=1, sticky=W)

window.r12=Radiobutton(f0, text="Idaho", variable=var, value=12,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=2, sticky=W)

window.r13=Radiobutton(f0, text="Illinois", variable=var, value=13,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=3, sticky=W)

window.r14=Radiobutton(f0, text="Indiana", variable=var, value=14,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=4, sticky=W)

window.r15=Radiobutton(f0, text="Iowa", variable=var, value=15,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=5, sticky=W)

window.r16=Radiobutton(f0, text="Kansas", variable=var, value=16,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=6, sticky=W)

window.r17=Radiobutton(f0, text="Kentucky", variable=var, value=17,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=7, sticky=W)

window.r18=Radiobutton(f0, text="Louisiana", variable=var, value=18,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=8, sticky=W)

window.r19=Radiobutton(f0, text="Maine", variable=var, value=19,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=9, sticky=W)

window.r20=Radiobutton(f0, text="Maryland", variable=var, value=20,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=2, row=10, sticky=W)

window.r21=Radiobutton(f0, text="Massachusetts", variable=var, value=21,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=1, sticky=W)

window.r22=Radiobutton(f0, text="Michigan", variable=var, value=22,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=2, sticky=W)

window.r23=Radiobutton(f0, text="Minnesota", variable=var, value=23,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=3, sticky=W)

window.r24=Radiobutton(f0, text="Mississippi", variable=var, value=24,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=4, sticky=W)

window.r25=Radiobutton(f0, text="Missouri", variable=var, value=25,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=5, sticky=W)

window.r26=Radiobutton(f0, text="Montana", variable=var, value=26,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=6, sticky=W)

window.r27=Radiobutton(f0, text="Nebraska", variable=var, value=27,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=7, sticky=W)

window.r28=Radiobutton(f0, text="Nevada", variable=var, value=28,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=8, sticky=W)

window.r29=Radiobutton(f0, text="New Hampshire", variable=var, value=29,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=9, sticky=W)

window.r30=Radiobutton(f0, text="New Jersey", variable=var, value=30,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=3, row=10, sticky=W)

window.r31=Radiobutton(f0, text="New Mexico", variable=var, value=31,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=1, sticky=W)

window.r32=Radiobutton(f0, text="New York", variable=var, value=32,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=2, sticky=W)

window.r33=Radiobutton(f0, text="North Carolina", variable=var, value=33,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=3, sticky=W)

window.r34=Radiobutton(f0, text="North Dakota", variable=var, value=34,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=4, sticky=W)

window.r35=Radiobutton(f0, text="Ohio", variable=var, value=35,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=5, sticky=W)

window.r36=Radiobutton(f0, text="Oklahoma", variable=var, value=36,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=6, sticky=W)

window.r37=Radiobutton(f0, text="Oregon", variable=var, value=37,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=7, sticky=W)

window.r38=Radiobutton(f0, text="Pennsylvania", variable=var, value=38,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=8, sticky=W)

window.r39=Radiobutton(f0, text="Rhode Island", variable=var, value=39,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=9, sticky=W)

window.r40=Radiobutton(f0, text="South Carolina", variable=var, value=40,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=4, row=10, sticky=W)

window.r41=Radiobutton(f0, text="South Dakota", variable=var, value=41,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=1, sticky=W)

window.r42=Radiobutton(f0, text="Tennessee", variable=var, value=42,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=2, sticky=W)

window.r43=Radiobutton(f0, text="Texas", variable=var, value=43,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=3, sticky=W)

window.r44=Radiobutton(f0, text="Utah", variable=var, value=44,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=4, sticky=W)

window.r45=Radiobutton(f0, text="Vermont", variable=var, value=45,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=5, sticky=W)

window.r46=Radiobutton(f0, text="Virginia", variable=var, value=46,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=6, sticky=W)

window.r47=Radiobutton(f0, text="Washington", variable=var, value=47,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=7, sticky=W)

window.r48=Radiobutton(f0, text="West Virginia", variable=var, value=48,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=8, sticky=W)

window.r49=Radiobutton(f0, text="Wisconsin", variable=var, value=49,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=9, sticky=W)

window.r50=Radiobutton(f0, text="Wyoming", variable=var, value=50,
                      font=("times", 12, "bold"), pady=6, padx=5).grid(column=5, row=10, sticky=W)

#define images
#US Map
imgus = ImageTk.PhotoImage(Image.open("US-Capitals-Map.jpg"))
panel = Label(f3, image = imgus)
panel.pack(side = "bottom", fill = "both", expand = "no")

#def show
def show():
    global show
    show=show.img

#Alabama State Flag
def alflag():
    img = ImageTk.PhotoImage(Image.open("Flag_of_Alabama.svg.png"))
    panel = Label(f2, image = img)
    panel.pack(side = "bottom", fill = "none", expand = "no")
    show()
    
#define get state information
def getstateinfo():
    if var.get() == 1:
        for widget in f2.winfo_children():
            widget.destroy()
        o1.delete('1.0', END)
        o1.insert(END, "State: Alabama\n")
        o1.insert(END, "State Number: 22\n")
        o1.insert(END, "Year of Statehood: 1819\n")
        o1.insert(END, "State Capital: Montgomery\n")
        resetinout=inputvalue.set("")
        resetinout=var.set(0)
        alflag()

    elif var.get() == 2:
        for widget in f2.winfo_children():
            widget.destroy()
        img = ImageTk.PhotoImage(Image.open("Flag_of_Alaska.svg.png"))
        panel = Label(f2, image = img)
        panel.pack(side = "bottom", fill = "none", expand = "no")
        show.img
        resetinout=var.set(0)     

    elif var.get() == 13:
        for widget in f2.winfo_children():
            widget.destroy()
        img = ImageTk.PhotoImage(Image.open("Flag_of_Illinois.svg.png"))
        panel = Label(f2, image = img)
        panel.pack(side = "bottom", fill = "none", expand = "no")
        show.img
        resetinout=var.set(0)

#define buttons

b1=Button(f0,text="Get State Info", bg='gray', fg='white', font="times 12 bold",
          width=24, padx=12, bd=12, relief=RIDGE, command = getstateinfo)
b1.grid(row=12,column=0)

b2=Button(f0,text="Reset", bg='gray', fg='white',font="times 12 bold",
          width=24, padx=12, bd=12, relief=RIDGE, command = resetinout)
b2.grid(row=11,column=0)

b3=Button(f1,text="Exit", bg='gray', fg='white',font="times 12 bold",
          width=24, padx=12, bd=12, relief=RIDGE, command = exitapp)
b3.grid(row=0,column=0,sticky=E)

b4=Button(f7,text="State Capital Map", bg='gray', fg='white',font="times 12 bold",
          width=24, padx=12, bd=12, relief=RIDGE)#, command = statecapmap)
b4.grid(row=0,column=0,sticky=E)

#define output box
o1=Text(f5, width=75, height=10, font="times 12 bold", bd=12, relief=RIDGE)
o1.grid(row=1,column=0)
o1.insert(END,
"INSTRUCTIONS:\n1) Select the radio button from the State list above\n2) Click on the Get State Info 
Button\n")

window.mainloop()

有一个简单的解决方法吗?请告知。

0 个答案:

没有答案