(Skip zu Hash-Tags, wenn in Eile) Dieses Programm wird nur funktionieren, wenn es auf dem Bild endet. Ich möchte es als Funktion in einem anderen Loop-Programm verwenden, aber es wird nicht funktionieren. Es zeigt die Werte des Pokémon an (p.whatever), aber das Bild wird nicht angezeigt. Das Bild wird in IDLE Python 3.4, aber nicht im Terminal angezeigt. Ich war monatelang dran.Das Bild wird nicht in einer Schleife angezeigt, warum nicht?
Hier ist das Programm, das (in IDLE Python 3.4, nicht das Terminal) funktioniert:
import pykemon
print('What are you looking for?')
askedpokemon = input()
pokemonInDatabase = False
while pokemonInDatabase == False:
pokemonInDatabase = True
try:
if ('1' in askedpokemon) or ('2' in askedpokemon) or ('3' in askedpokemon) or ('4' in askedpokemon) or ('5' in askedpokemon) or ('6' in askedpokemon) or ('7' in askedpokemon) or ('8' in askedpokemon) or ('9' in askedpokemon):
p = (pykemon.get(pokemon_id = askedpokemon))
else:
askedpokemon = askedpokemon.lower()
p = (pykemon.get(pokemon = askedpokemon))
#Turns askedpokemon into number
askedpokemon = p.resource_uri
askedpokemon = askedpokemon.replace('/api/v1/pokemon/',' ')
askedpokemon = askedpokemon.replace('/',' ')
askedpokemon = askedpokemon.strip()
except pykemon.exceptions.ResourceNotFoundError:
print(askedpokemon + " is not a valid Pokemon name or id number.")
print('Try another')
askedpokemon = input()
pokemonInDatabase = False
print (p)
pTypes = (p.types)
for key, value in pTypes.items() :
pTypes = str(key)
print (' Type: ' + pTypes)
print (' HP: ' + str(p.hp))
print (' Attack: ' + str(p.attack))
print ('Defense: ' + str(p.defense))
print (' Sp Atk: ' + str(p.sp_atk))
print (' Sp Def: ' + str(p.sp_def))
print (' Speed: ' + str(p.speed))
print ('Exp Yield: ' + str(p.exp))
#######################################################
import time
import urllib
import urllib.request
import tkinter as tk
root = tk.Tk()
url = "http://assets22.pokemon.com/assets/cms2/img/pokedex/full/526.png"
if len(askedpokemon) < 3:
if len(askedpokemon) == 2:
askedpokemon = ('0' + askedpokemon)
if len(askedpokemon) == 1:
askedpokemon = ('00' + askedpokemon)
url = url.replace('526', askedpokemon)
u = urllib.request.urlopen(url)
raw_data = u.read()
u.close()
import base64
b64_data = base64.encodestring(raw_data)
image = tk.PhotoImage(data=b64_data)
label = tk.Label(image=image)
label.pack()
##########################################################
Unten ist das Arbeitsprogramm mit seinen Modulen. Hier
https://drive.google.com/file/d/0B3Q4wQpL0nDUYWFFSjV3cUhXVWc/view?usp=sharing
Ich würde wetten, das ist das Problem http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm. Einer von 100.000 Orten kommt auf SO: http://stackoverflow.com/a/15216402/2329988. Kann nicht der Fall sein ... aber ich wette, es ist :) –
@en_Knight: Der Code hat die erforderliche 'image = tk.PhireImage (...)' wie im Link angegeben. Das Problem ist das Fehlen von 'root.mainloop()' im Code oder '-i' in der Befehlszeile. –
@TerryJanReedy froh, dass Sie herausgefunden haben, was das Problem war. Ich meinte, dass er keine Verbindung zu dem Bild speicherte, und dass tk nur schwache Referenzen verwendet, so dass das Bild gc'd werden kann, wenn der Rahmenstapelrahmen fallengelassen wird. Aber ich denke, das passiert hier nicht, da das OP Ihre Antwort akzeptiert –