현재 tkinter에서 레이블을 사용하여 버튼을 만들려고합니다. 이 버튼에는 'Enter', 'Leave'및 'Button-1'바인딩이 있습니다. 사용자가 레이블 위로 마우스를 가져 가면 이미지가 변경되고 레이블을 떠날 때 정상으로 돌아옵니다. 클릭하면 이벤트 라벨이 이미지를 변경하고 다른 라벨의 이미지를 '보통'으로 설정하지만 어떻게 든 작동하지 않습니다. 라벨을 클릭하면 다른 라벨을 클릭하고 첫 번째 라벨 위로 마우스를 가져 가면 이미지가 '입력'바인딩으로 예상대로 변경되지만 '퇴장'에서는 변경되지 않습니다. 파이썬 3.6과 함께 이미지 용 tkinter와 PIL을 사용하고 있습니다.레이블에 Tkinter 바인딩이 작동하지 않습니다.
다음def changeImage(img_loc, container, width, height) :
img = PIL.Image.open(img_loc)
img = img.resize((width, height), PIL.Image.ANTIALIAS)
img = PIL.ImageTk.PhotoImage(img)
container.config(image = img)
container.image = img
은 라벨 작성 및 구속력 :
lbtn_npcs = generateImage(dir + '/resources/images/buttons/npcs.png', 204, 100, fr_top, bg = '#252A29', x = '1054', y = '0', cur = 'hand2')
lbtn_enemies = generateImage(dir + '/resources/images/buttons/enemies.png', 204, 100, fr_top, bg = '#252A29', x = '830', y = '0', cur = 'hand2')
lbtn_players = generateImage(dir + '/resources/images/buttons/players.png', 204, 100, fr_top, bg = '#252A29', x = '606', y = '0', cur = 'hand2')
buttons_top = [lbtn_npcs, lbtn_enemies, lbtn_players]
pics = [dir + "/resources/images/buttons/npcs.png", dir + "/resources/images/buttons/enemies.png", dir + "/resources/images/buttons/players.png"]
pics_hover = [dir + "/resources/images/buttons/npcs_hover.png", dir + "/resources/images/buttons/enemies_hover.png", dir + "/resources/images/buttons/players_hover.png"].
lbtn_npcs.bind("<Enter>", lambda event : changeImage(dir + "/resources/images/buttons/npcs_hover.png", lbtn_npcs, 204, 100))
lbtn_npcs.bind("<Leave>", lambda event : changeImage(dir + "/resources/images/buttons/npcs.png", lbtn_npcs, 204, 100))
lbtn_npcs.bind("<Button-1>", lambda event : changeBtnPic(buttons_top, pics, pics_hover, 204, 100, event))
lbtn_enemies.bind("<Enter>", lambda event : changeImage(dir + "/resources/images/buttons/enemies_hover.png", lbtn_enemies, 204, 100))
lbtn_enemies.bind("<Leave>", lambda event : changeImage(dir + "/resources/images/buttons/enemies.png", lbtn_enemies, 204, 100))
lbtn_enemies.bind("<Button-1>", lambda event : changeBtnPic(buttons_top, pics, pics_hover, 204, 100, event))
lbtn_players.bind("<Enter>", lambda event : changeImage(dir + "/resources/images/buttons/players_hover.png", lbtn_players, 204, 100))
lbtn_players.bind("<Leave>", lambda event : changeImage(dir + "/resources/images/buttons/players.png", lbtn_players, 204, 100))
lbtn_players.bind("<Button-1>", lambda event : changeBtnPic(buttons_top, pics, pics_hover, 204, 100, event))
def generateImage(img_loc, width, height, container, **kwargs) :
bg = kwargs.get('bg')
x = kwargs.get('x')
y = kwargs.get('y')
img = PIL.Image.open(img_loc)
img = img.resize((width, height), PIL.Image.ANTIALIAS)
img = PIL.ImageTk.PhotoImage(img)
lb_img = tk.Label(container, image = img, bg = "#252A29")
if bg :
lb_img.config(bg = bg)
lb_img.image = img
lb_img.pack()
if x and y :
lb_img.place(x = int(x), y = int(y))
return(lb_img)
나는 리 바인드를 가정
def changeBtnPic(buttons, pics, pics_hover, width, height, event) :
for i in range (0, len(buttons)) :
clicked_frame = event.widget
if clicked_frame == buttons[i] :
changeImage(pics_hover[i], buttons[i], width, height)
buttons[i].unbind('<Leave>')
elif clicked_frame != buttons[i] :
changeImage(pics[i], buttons[i], width, height)
buttons[i].bind('<Leave>', changeImage(pics[i], buttons[i], width, height))
이 그것을 호출하는 changeImage 기능은 다음과 같습니다
는 여기에 관심이 함수의 작동하지 않지만이게 실제로 원인인지 해결할 방법인지 알 수 없습니다. 아이디어 나 리드가 있습니까?
감사합니다.
코드 사진을 게시 할 수 없으므로 실제 코드를 복사하여 붙여 넣으십시오. –
@Coal_ Done. 죄송합니다,이 옵션을 보지 못했습니다 ^^ – KanarchiK
들여 쓰기에 약간의 문제가 있습니다. 첫 번째 코드 블록을 수정하십시오. 적어도 전체 예제를 제공해주십시오. 'lbtn_npcs','lbtn_enemies' 및'lbtn_players'에 대한 코드는 어디에 있습니까? 가능한 경우 여기에 모든 것을 붙여 넣으십시오. –