2017-08-23 15 views
0

リーグの伝説などのゲームのためのマップ上に単語を置くためにtkinterでguiを構築しようとします。 tkinterでこのようなguiをどれくらい速く作ることができますか驚くほどですが、私は単独では解決できない問題に遭遇しますそれはそうと:クリックイベントのため背景tkinterとPILに複数のイメージを表示しますか?

機能(キャンバス/マップ上の単語の絵を作成します):

def sightstone(event): 
i = Image.open('Sightstone_item.png') 
i = i.resize((10, 10), Image.ANTIALIAS) 
img = ImageTk.PhotoImage(i) 
sword = tk.Label(panel, image=img, compound=tk.CENTER) 
sword.place(x=event.x, y=event.y, width=10, height=10) 
sword.image = img 
n = len(words) + 1 
string = 'sword ' 
words.update({string + '%d' % n: [(event.x, event.y)]}) 
dump.update({string + '%d' % n: [sword, img, i]}) 
print('clicked at', event.x, event.y) 

休憩をそれを設定するために:私はsword1を作成し、2

window = tk.Tk() 
Canvas = tk.Canvas(window, width=768, height=810) 
img = Image.open('srift.jpg') 
img = img.resize((768, 810), Image.ANTIALIAS) 
mapimg = ImageTk.PhotoImage(img) 
panel = tk.Label(window, image=mapimg) 
panel.bind("<Control-Button-1>", sightstone) 
panel.place(x=0, y=0, relwidth=1, relheight=1) 
i = Image.open('Sightstone_item.png') 
i = i.resize((10, 10), Image.ANTIALIAS) 
img = ImageTk.PhotoImage(i) 
sword1 = tk.Label(panel, image=img, compound=tk.CENTER) 
sword1.place(x=384, y=405, width=10, height=10) 
sword1.image = img 
sword2 = tk.Label(panel, image=img, compound=tk.CENTER) 
sword2.place(x=405, y=405, width=10, height=10) 
sword2.image = img 
Canvas.pack() 
words = {}; dump = {}; string = '' 
Canvas.find_all() 
window.mainloop() 

注意を私がどのようにそれは蟻です。しかしもし私がctrl +左クリックして別の単語を作成すると、sword1と2が消えます。私がevent.xとevent.yを取得したり、単語の座標を取得することが重要なのです。

答えて

0

返信したジョアキンになるクレジット here! 私が変更したのは、キャンバスを作成し、ラベルを生成する代わりにキャンバス上に背景イメージを作成しました。

#in sightstone(event) change following: 
sward = tk.Label(Canvas, image=img, compound=tk.CENTER) 
#then in main: 
Canvas.create_image(384, 405, image=mapimg) 
Canvas.bind("<Control-Button-1>", sightstone) 
Canvas.pack(expand = 'yes', fill = 'both') 

これですべての問題は解決しました。 = ^)

関連する問題