2017-10-24 10 views
0

Rainbox Six Siegeのランダムなオペレータネームジェネレータをプログラミングしていて、その名前が来たときにオペレータの画像を表示したい。画像はうまく表示されますが、消えません。これは私のコードです:tkinterでイメージを消す方法

from tkinter import * 
    import tkinter 
    import random 

    names = ['Sledge','Thatcher','Ash','Thermite','Twitch','Montagne','Glaz','Fuze','Blitz','IQ','Buck','Blackbeard','Capitão','Hibana'] 
    name = ["Smoke","Mute","Castle","Pulse","Doc","Rook","Kapkan","Tachanka","Jäger","Bandit","Frost","Valkyrie","Caveira","Echo"] 
    root = tkinter.Tk() 
    def pickName(): 
     rad = random.choice(names) 
     photo = PhotoImage(file=rad+".png") 
     label = Label(image=photo) 
     label.image = photo # keep a reference! 
     label.pack() 
     nameLabel.configure(text=rad, foreground="white", background="blue") 
     root.configure(background='blue') 
    def pickName1():  nameLabel.configure(text=random.choice(name),background="orange",foreground="black") 
     root.configure(background='orange') 



    root.title("Operator Picker") 

    root.geometry("250x100") 

    nameLabel = tkinter.Label(root, text="", font=('Helvetica', 32)) 
    nameLabel.pack() 
    Grid() 

    f1 = tkinter.Frame(root, height=100, width=100) #defines frame size in 
    pixels 
    f1.pack(side=tkinter.LEFT) #packs on the left 
    f1.pack_propagate(0) #tells frame not to let children control size 
    pickButton1 = tkinter.Button(f1, command=pickName, text="Pick       
    Attack",background="blue",foreground="white") 
    pickButton1.pack(fill=tkinter.BOTH, expand=1) #takes up all available space 

    f2 = tkinter.Frame(root, height=100, width=100) 
    f2.pack(side=tkinter.RIGHT) 
    f2.pack_propagate(0) 
    pickButton2 = tkinter.Button(f2, command=pickName1, text="Pick 
    Defend",background="orange",foreground="black") 
    pickButton2.pack(fill=tkinter.BOTH, expand=1) 

    root.mainloop() 

注:これはまだ私が必要とするすべては、彼らが表示されたら、絵を取り除く方法を知っているWIP、です。これは、複数の画像が表示された場合に表示されます。https://imgur.com/eroXLLn

+0

。あなたはそれを破壊せず、あなたはそれを隠さない。 –

+0

@ブライアンオークリー私は彼がそれをする方法を知らないと思う。 – Nae

+0

@BryanOakleyはい私はそれをどのように破壊するかわからないそれは私の問題です –

答えて

2

この関数を呼び出すたびに、新しいラベルを追加しています。代わりに、(おそらく初期化段階で)ラベルを1回だけ作成し、画像を更新する必要があります。 nameLabelのテキストを更新するだけでなく、参照を保持する手順も同様です。

photo_label = tkinter.Label() 
def pickName(): 
    rad = random.choice(names) 
    photo = PhotoImage(file=rad+".png") 
    photo_label.configure(image = photo) 
    photo_label.image = photo # keep a reference! 
    photo_label.pack() 

    nameLabel.configure(text=rad, foreground="white", background="blue") 

とあなたの全体のコードは次のようになります。あなたも、古いウィジェットが離れて行くようにしようどこ私はどこにも表示されない

from tkinter import * 
import tkinter 
import random 

names = ['Sledge','Thatcher','Ash','Thermite','Twitch','Montagne','Glaz','Fuze','Blitz','IQ','Buck','Blackbeard','Capitão','Hibana'] 
name = ["Smoke","Mute","Castle","Pulse","Doc","Rook","Kapkan","Tachanka","Jäger","Bandit","Frost","Valkyrie","Caveira","Echo"] 
root = tkinter.Tk() 
photo_label = tkinter.Label() 
def pickName(): 
    rad = random.choice(names) 
    photo = PhotoImage(file=rad+".png") 
    photo_label.configure(image = photo) 
    photo_label.image = photo # keep a reference! 
    photo_label.pack() 

    nameLabel.configure(text=rad, foreground="white", background="blue") 
    root.configure(background='blue') 
def pickName1():  nameLabel.configure(text=random.choice(name),background="orange",foreground="black") 
root.configure(background='orange') 



root.title("Operator Picker") 

root.geometry("250x100") 

nameLabel = tkinter.Label(root, text="", font=('Helvetica', 32)) 
nameLabel.pack() 
Grid() 

f1 = tkinter.Frame(root, height=100, width=100) #defines frame size inpixels 
f1.pack(side=tkinter.LEFT) #packs on the left 
f1.pack_propagate(0) #tells frame not to let children control size 
pickButton1 = tkinter.Button(f1, command=pickName, text="PickAttack",background="blue",foreground="white") 
pickButton1.pack(fill=tkinter.BOTH, expand=1) #takes up all available space 

f2 = tkinter.Frame(root, height=100, width=100) 
f2.pack(side=tkinter.RIGHT) 
f2.pack_propagate(0) 
pickButton2 = tkinter.Button(f2, command=pickName1, text="PickDefend",background="orange",foreground="black") 
pickButton2.pack(fill=tkinter.BOTH, expand=1) 

root.mainloop() 
+0

photo_labelは定義されていません –

+0

@AidanChristopher私は 'photo_label'は自分のコードスニペットで' label'と呼ばれると思います。 – Nae

+0

@AidanChristopher私はこのアプローチが良い方法だと思います。これは基本的に 'nameLabel'でもやっていることですので、より一貫しています。この答えの 'def pickName():'の前に 'photo_label = tkinter.Label()'を追加するだけです。 – Nae

関連する問題