2017-08-07 5 views
0

私が抱えている問題は、最終ラベルを除いて同じ画像(ラベル内)が表示されないことです。ここに私が何を意味するかを示す写真があります。この写真では、私は7枚のカードを生成し、次に2を生成しました。空白のスペースを疑問符で埋めることを望みます。 Like hereTkinter最後の1枚を除いて同じ画像が見えない画像ラベル

作成できるカードの最大数は0〜8です。 6枚のカードを生成して4枚のカードを生成すると、カード5-6をランダムなカード画像に戻すことができます。

randomUnknown = Card("RANDOM", PATH + '\\random-unknown.png', 'N/A', 'N/A') 
#Note: randomUnknown is in a separate file. The card.randomUnknown just calls it 
randomCard = card.randomUnknown 

card1 = randomCard 
card2 = randomCard 
card3 = randomCard 
card4 = randomCard 
card5 = randomCard 
card6 = randomCard 
card7 = randomCard 
card8 = randomCard 

card1Label = card1.createLabel(root) 
card2Label = card2.createLabel(root) 
card3Label = card3.createLabel(root) 
card4Label = card4.createLabel(root) 
card5Label = card5.createLabel(root) 
card6Label = card6.createLabel(root) 
card7Label = card7.createLabel(root) 
card8Label = card8.createLabel(root) 

ウィンドウが作成された後、これが私のコードの先頭にある

import tkinter as tk 
from PIL import Image, ImageTk 
class Card: 
    def __init__(self, name, imageURL, cardType, rarity): 
     self.name = name 
     self.imageURL = imageURL 
     self.cardType = cardType 
     self.rarity = rarity 
    def __repr__(self): 
     print(self.name) 
    def __str__(self): 
     return self.name 
    def returnImage(self): 
     self.timage = Image.open(self.imageURL) 
     if not self.timage.size == (212,263): 
      self.timage = self.timage.resize((212,263), Image.ANTIALIAS) 
     self.tphoto = ImageTk.PhotoImage(self.timage) 
     return self.tphoto 
    def createLabel(self, parent): 
     self.timage = Image.open(self.imageURL) 
     if not self.timage.size == (212,263): 
      self.timage = self.timage.resize((212,263), Image.ANTIALIAS) 
     self.tphoto = ImageTk.PhotoImage(self.timage) 
     self.cardLabel = tk.Label(parent, image = self.tphoto) 
     self.cardLabel.image = self.tphoto 
     return self.cardLabel 

メインカードCLASS。それぞれのラベルは、私が表示しようとしている画像で正しく表示されます。だからここのように:At the Start

私の試み

ボタンが押されるたびに、カードを採取し、表示されます。このコードも実行されます。私もrandomCard.createLabel(ルート)にラベルを設定しようとしましたが、同じことが起こりました。

def randomizeButton(): 
    global currentCards,card1Label, card2Label,card3Label,card4Label,card5Label,card6Label,card7Label,card8Label 
    currentCards = maxCards 
    setMax() 
    randomizeCards() 
    print('Current Cards: ' + str(currentCards)) 
    if(maxCards == 0): 
     card1Label.configure(image = randomCard.returnImage()) 
     card2Label.configure(image = randomCard.returnImage()) 
     card3Label.configure(image = randomCard.returnImage()) 
     card4Label.configure(image = randomCard.returnImage()) 
     card5Label.configure(image = randomCard.returnImage()) 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 1): 
     card2Label.configure(image = randomCard.returnImage()) 
     card3Label.configure(image = randomCard.returnImage()) 
     card4Label.configure(image = randomCard.returnImage()) 
     card5Label.configure(image = randomCard.returnImage()) 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 2): 
     card3Label.configure(image = randomCard.returnImage()) 
     card4Label.configure(image = randomCard.returnImage()) 
     card5Label.configure(image = randomCard.returnImage()) 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 3): 
     card4Label.configure(image = randomCard.returnImage()) 
     card5Label.configure(image = randomCard.returnImage()) 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 4): 
     card5Label.configure(image = randomCard.returnImage()) 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 5): 
     card6Label.configure(image = randomCard.returnImage()) 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 6): 
     card7Label.configure(image = randomCard.returnImage()) 
     card8Label.configure(image = randomCard.returnImage()) 
    if(maxCards == 7): 
     card8Label.configure(image = randomCard.returnImage()) 

ラベルはグリッドに設定されています。

card1Label.grid(row = 0, column = 0) 
card2Label.grid(row = 0, column = 1) 
card3Label.grid(row = 0, column = 2) 
card4Label.grid(row = 0, column = 3) 
card5Label.grid(row = 1, column = 0) 
card6Label.grid(row = 1, column = 1) 
card7Label.grid(row = 1, column = 2) 
card8Label.grid(row = 1, column = 3) 

これ以上情報が必要な場合は、私はそれを提供することがうれしいです。私はすべての必要な情報を提供しようとしました。

+0

コード全体を入れることができますか?私はどれくらいのファイルを取得していません...あなたが望むものを簡単に説明することができますか? –

+0

@ GiovanniGianni私は「?」というラベルを取得したいと思います。それらの中には、上の写真のすべての空白に表示されます。今のところ、画像は最後のラベルにのみ表示されます。全体のコードは約700行程度です。私はこの問題がこれらのコードスニペットにあると確信しています。本気ですか?編集:約70の画像があります –

+0

'randomCard.returnImage()'のコードを提供できますか?私はそれが原因である可能性があると思う... – StellarDoor5319

答えて

1

Tkinterでは、各イメージインスタンスを1回だけ使用できます。同じイメージを複数回表示するには、ラベルごとにイメージをロードする必要があります。

あなたは同じ画像を5回表示しようとしていた場合たとえば、あなたはそのようなコードを実行する必要がありますが:

import tkinter 
root = tkinter.Tk() 
image1 = tkinter.PhotoImage(file=icon.gif) 
label1 = tkinter.Label(root, image=image1) 
label1.pack() 
image2 = tkinter.PhotoImage(file=icon.gif) 
label2 = tkinter.Label(root, image=image2) 
label2.pack() 
image3 = tkinter.PhotoImage(file=icon.gif) 
label3 = tkinter.Label(root, image=image3) 
label3.pack() 
image4 = tkinter.PhotoImage(file=icon.gif) 
label4 = tkinter.Label(root, image=image4) 
label4.pack() 
image5 = tkinter.PhotoImage(file=icon.gif) 
label5 = tkinter.Label(root, image=image5) 
label5.pack() 

は明らかに、これは単なる一例であり、変数を使用していませんあなたのコードの名前やクラス。

+0

私は、それぞれのスロットのために異なる画像を作成することにしました。なぜなら、私のコードでは少し楽になったからです。とにかく、ありがとう。 –

関連する問題