2016-10-03 2 views
1

Mit ttk-Etiketten können mehrere Bilder angegeben werden, die entsprechend dem Status des Etiketts angezeigt werden. Aber ich kann es nicht funktionieren lassen. Hier ist der Code.Mehrere Bilder in einem ttk-Etiketten-Widget

from tkinter import * 
from tkinter.ttk import * 

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 
}; 
""" 

BITMAP1 = """ 
#define one_width 24 
#define one_height 32 
static char one_bits[] = { 
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 
0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00, 
0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 
0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00, 
0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x0f, 0x00,0x00,0x0f, 
0x00,0x00,0x0f, 0x00,0x00,0x0f, 0x00,0x00,0x00, 0x00,0x00,0x00 
}; 
""" 

root = Tk() 
img0 = BitmapImage(data=BITMAP0, foreground='lime', background='black') 
img1 = BitmapImage(data=BITMAP1, foreground='lime', background='black') 
label = Label(root, image=(img0, 'active', img1)) 
label.pack() 

Die Beschriftung ist "aktiv", wenn die Maus darüber fährt. Die angezeigte Ziffer sollte also von 0 auf 1 wechseln, wenn die Maus darüber fährt. Aber es funktioniert nicht. Irgendwelche Hilfe? Python 3.5.1/Windows Vista

Antwort

1

Ich finde die Dokumente ein wenig verwirrend, aber es sieht so aus, als ob Sie wollen 'hover' statt 'active'.

Mir ist keine Quelle bekannt, die erklärt, welche Statusflags automatisch in welchen Wiglets unter welchen Bedingungen gesetzt werden. Was ich hier getan habe, war, den Mauszeiger über das Etikett zu setzen und dann den Zustand abzufragen, indem man label.state() aufruft.

+0

Die Liste der Zustände für ttk Widgets ist hier: http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-map.html und die Dokumentation der Bildoption für ttk.Label Widget ist hier: http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Label.html – Jal

+0

@Jal Ich hätte "zuverlässige und vollständige Quellen" schreiben sollen. Aber hat die Verwendung von "Hover" anstelle von "Active" für Sie funktioniert? – Goyo

+0

Nein, "Hoover" scheint kein gültiger ttk-Widgetstatus zu sein. _tkinter.TclError: Ungültiger Statusname Hoover. Es gibt eine Problemumgehung für mein Problem mit 'label.bind (" ", eingeben)' und 'label.bind (" ", lassen)' aber ich würde gerne verstehen, warum 'Label (root, image = (img0, "aktiv", img1)) funktioniert nicht wie erwartet. Danke für Ihr Interesse. – Jal