2015-10-25 24 views
5

Sto facendo alcune interfacce grafiche di recente e abbiamo trovato i tasti sembravano piuttosto blando così ho letto alcuni tutorial su come fare l'aspetto migliore usando TTK ed ha ottenuto la seguente:Quanti/Quali sono i diversi tipi di stili ttk disponibili?

from tkinter import ttk 
from tkinter.ttk import * 

root = tkinter.Tk() 

style = ttk.Style() 
style.configure("BW.TLabel") 

btn = ttk.Button(text="Test") 
btn.pack() 

root.mainloop() 

Sì sembra meglio, ma mi chiedevo se ci sono diversi stili di ttk e se sì, quanti sono lì e dove controllarli

risposta

1

non ci sono molti stili incorporati per ttk, credo che sia solo uno stile per tipo di widget. ciò che ttk ti permette di fare è definire i tuoi stili che sono derivati ​​dai builtin, modificare i bit che vuoi diversi e quindi applicare lo stile a tutti i widget facilmente.

This è un buon riferimento per guardare. ma dite per esempio si voleva cambiare tutti i pulsanti TTK così hanno usato un carattere di colore rosso si dovrebbe effettuare le seguenti operazioni:

import tkinter as tk 
from tkinter import ttk 
from tkinter.ttk import * 

root = tk.Tk() 

style = ttk.Style() 
style.configure("TButton", foreground="red") 

btn = ttk.Button(text="Test") 
btn.pack() 

root.mainloop() 

allora ogni tasto ttk sarebbe essere in stile con un primo piano rosso.

per creare un nuovo stile si dovrebbe fare questo:

import tkinter as tk 
from tkinter import ttk 
from tkinter.ttk import * 

root = tk.Tk() 

style = ttk.Style() 
style.configure("Mine.TButton", foreground="red") 

btn = ttk.Button(text="Test") 
btn.pack() 
btn2 = ttk.Button(text="Test", style="Mine.TButton") 
btn2.pack() 

root.mainloop() 

in modo che il primo pulsante utilizza lo stile pulsante di default, ma io sono derivare un nuovo stile pulsante chiamato Mine.TButton (la .TButton significa che le copie lo stile esistente di TButton e quindi modifica quello che hai specificato nella chiamata di configurazione)

così ogni pulsante creato con quello stile avrà lo stesso aspetto.

2

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.

Problemi correlati