2016-09-13 2 views
2

ttk 이미지의 전경색을 변경하면 비트 맵 이미지가 포함 된 레이블이 제대로 작동하지 않습니다. ttk 레이블에만이 문제가 있습니다. Tkinter 레이블이 제대로 작동합니다. 사용자가 마우스로 이미지 위에 비행하지 않는 한, 그렇지,ttk 레이블이 올바르게 동작하지 않습니다.

import tkinter as tk 
import tkinter.ttk as ttk 

BITMAP0 = """ 
#define zero_width 24 
#define zero_height 32 
static char zero_bits[] = { 
0x00,0x00,0x00, 0x00,0x00,0x00, 0xf0,0x3c,0x0f, 0xf0,0x3c,0x0f, 
0xf0,0x3c,0x0f, 0xf0,0x3c,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00, 
0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 
0x00,0x00,0x00, 0x00,0x00,0x00, 0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 
0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00, 
0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 0xf0,0x00,0x0f, 
0x00,0x00,0x00, 0x00,0x00,0x00, 0xf0,0x3c,0x0f, 0xf0,0x3c,0x0f, 
0xf0,0x3c,0x0f, 0xf0,0x3c,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00 
}; 
""" 

root = tk.Tk() 

img = tk.BitmapImage(data=BITMAP0, foreground='Lime', background='Black') 

label = ttk.Label(root, image=img) 
label.pack() 

color = ['red', 'yellow', 'lime', 'white'] 

def change_color(n): 
    img.config(foreground=color[n]) 
    if n == 3: 
     root.after(1000, change_color, 0) 
    else: 
     root.after(1000, change_color, n+1) 

root.after(1000, change_color, 0) 

root.mainloop() 

이미지의 전경 색상은 매초마다 변경해야합니다 : 여기

는 코드입니다. 그냥 라인을 교체 :와

label = ttk.Label(root, image=img) 

:

label = tk.Label(root, image=img) 

프로그램이 작동합니다. 도움이 될 것입니다.

나는 레이블 변경된 이미지를 재 할당 윈도우 비스타

+0

은 왜 그냥는 TK 라벨을 사용할 수 있습니까? ttk 레이블을 사용하려고 할 때 어떤 이점이 있습니까? –

+0

내 프로그램의 전체 GUI가 ttk를 사용하고 있습니다. 하나의 위젯에 tkinter를 사용하면 좋지 않습니다. 어쨌든 이것은 ttk 레이블의 버그라고 생각합니다. – Jal

+0

ttk의 레이블은 이미지의 인수로 튜플을 요구하는 것 같습니다.'label = ttk.Label (root, image = (img,))'('()'의 쉼표에주의하십시오. 튜플이어야 함을 알고 있습니다.) – Delioth

답변

3

시도와 파이썬 3.5을 사용하고 있습니다 : 그것은 작동하는 경우

def change_color(n): 
    img.config(foreground=color[n%4]) 
    label.config(image=img) # reassign the changed image to label 
    root.after(1000, change_color, n+1) 
+0

예 힌트와 함께 작동합니다. 고마워 – Jal

관련 문제