In primo luogo, alcuni termini. Ttk è uno strato tematico per Tk. Consiste in una raccolta di temi composta da stili applicati ai widget. Gli stili sono costituiti da elementi forniti da uno o più motori di elementi.
L'intento dello strato tematico era di rendere Tk più adatto all'aspetto originario del desktop degli utenti piuttosto che consentire al programmatore di creare tutti i tipi di widget personalizzati dall'aspetto orribile. Questo è già stato raggiunto da Tk.
Quindi su Windows il tema predefinito è uno che può utilizzare l'API di Visual Styles. Questa è la cosa che disegna i bordi dei pulsanti e gli sfondi e così via su Windows XP e versioni successive. Poiché Tk supportava le versioni precedenti di Windows quando questo è stato creato, abbiamo anche un tema che supporta gli elementi di disegno GDI (winnative). Per Tk che gira su MacOS c'è un motore di elementi che usa il tema nativo e su X11 dobbiamo usare il disegno di Tk per emettere qualcosa che sembra ok. I tentativi di far sì che Ttk si innesti nelle API di tema GTK + e Qt non sono decollati.
Quindi i temi disponibili dipendono dalla piattaforma su cui ci si trova. Temi diversi offrono diverse quantità di configurabilità. Quelli che utilizzano elementi forniti da un'API esterna (vsapi, winnative o aqua) non ti permettono di personalizzare molto. Tuttavia, i temi possono anche importare elementi dal motore di elementi predefinito (Tk disegnato) o utilizzare images come elementi visivi. Il motore di elementi immagine ti consente di cambiare completamente l'aspetto dell'intera collezione di stili (e quindi l'aspetto di tutti i widget) se lo desideri. Tuttavia è piuttosto lento.
In generale, il punto era ridurre il lavoro sugli sviluppatori per rendere le applicazioni native e non per consentire la massima personalizzazione.
Per trovare i temi disponibili:
>>> ttk.Style().theme_names()
('clam', 'alt', 'default', 'classic')
questo era su Linux. Su Windows 7 ci sarebbero anche winnative, xpnative e vista. Il tema iniziale viene selezionato a seconda della piattaforma in fase di esecuzione, a meno che l'applicazione non selezioni un tema alternativo.
Gli stili definiti all'interno di un tema sono tutti collegati ai widget. Non esiste alcun metodo per enumerare tutti gli stili. È possibile eseguire iterazioni su tutti i widget ttk e osservare i loro risultati del metodo winfo_class()
in quanto mostra lo stile del tema utilizzato da quel widget.