0

わかりましたので、Tkinter (3.3) を使用してプログラムを作成しています。ユーザーが名前を送信すると、その名前がデータベースcards.cdbで検索され、その情報が出力され、オンライン ソースと比較されますurl。関数 を使用して、指定されたものの画像も表示しますpicture。そのため、ボタンをクリックすると関数が呼び出され、そのbuttonclicked関数が他の 2 つの関数を呼び出します。

from tkinter import *
import urllib
import urllib.request
from bs4 import BeautifulSoup
import Pydeck
import sys
from collections import defaultdict

root = Tk()
name=""
def buttonclicked():
    name()
    picture(text)

def name():
    all_lists=[] #all lists
    text = inputfield.get()
    Pydeck.loadDatabase('C://Users/Trevor/Desktop/Y-In Process/cards.cdb')
    cardName = Pydeck.getCardsFromName(text)
    if not cardName == "":
            c = Pydeck.Card(cardName)
    tex.insert(END, c.name)
    level="\nLevel %s" % c.level + " " + c.attribute + " " + c.typestring 
    tex.insert(END, level)
    atk="\nAtk: %s" % c.attack
    tex.insert(END, atk)
    defe="\nDef: %s" % c.defense
    tex.insert(END, defe)
    typestring='\n%s' %c.typestring
    desc='\n%s' %c.description
    seperator='\n--------------------\n'
    tex.insert(END, typestring)
    tex.insert(END, desc)
    tex.insert(END,seperator)
    #--
    url_name=c.name.replace(' ','_')
    url=('http://yugioh.wikia.com/wiki/Card_Tips:{}'.format(url_name))
    page = urllib.request.urlopen(url)
    soup = BeautifulSoup(page.read())
    content = soup.find('div',id='mw-content-text')
    links = content.findAll('a')
    link_lists = defaultdict(list)
    all_lists.append([link.get("title") for link in links])
    common_links = set(all_lists[0]).intersection(*all_lists[1:])
    omit_list=['None', 'Special Summon', 'Edit Searchable by section', 'Edit Special Summoned from the hand by section','Edit Special Summoned from the Deck by section','Edit Special Summoned from the Graveyard by section','Edit Easier Tribute Summons section','Edit Generic Tips section','Edit Traditional Format section']
    final=set(common_links)-set(omit_list)
    tex.insert(END,final)
    #--
    tex.see(END)             # Scroll if necessary


def picture(text):
    gifdir = "C:\\Users\\Trevor\\Desktop\\Y-In Process\\Pictures\\"
    Pydeck.loadDatabase('C://Users/Trevor/Desktop/Y-In Process/cards.cdb')
    cardName = Pydeck.getCardsFromName(text)
    if not cardName == "":
        c=Pydeck.Card(cardName)
    filename='{}.gif' .format(c.cardID)
    img = PhotoImage(file=gifdir+filename)
    can = Canvas(root)
    can.pack(fill=BOTH,side='left')
    can.config(width=img.width(), height=img.height())        
    can.create_image(2, 2, image=img, anchor=NW)

tex=Text(root)
tex.pack(side='right')
inputfield = Entry(root)
inputfield.pack(side='bottom')
but = Button(root,text="Enter Name", command = buttonclicked) #Calls name function
but.pack(side='bottom')
text = inputfield.get()


root.mainloop()

エラーが発生します

filename='{}.gif' .format(c.cardID)
UnboundLocalError: local variable 'c' referenced before assignment

c作成されていないことを意味しますが、picture関数で定義しますが、認識しません。

私が困惑しているので、誰か提案がありますか?

4

1 に答える 1