2010-10-21 11 views
7

Python 2.7 (32-bit) Windows: stiamo sperimentando il supporto di Python 2.7 per il tema Tkinter (ttk) per semplici GUI e ne siamo usciti molto colpiti !! L'unica area in cui il nuovo supporto per i temi sembra essere venuto meno è il modo in cui sono raggruppate le finestre di dialogo comuni specifiche del sistema operativo.Python 2.7: Interfaccia tkinter "comune di dialogo" a tema tramite Ttk?

Corretto: In altre parole, le MessageBox e ColorChooser finestre di dialogo comuni hanno "brutto" cercando Win 95 stile a blocchi i pulsanti a tema (arrotondato/gradiente) che normalmente appaiono nelle finestre di dialogo comuni sotto XP, Vista cercando pulsanti contro, e Windows 7. (Sto testando su tutte e 3 le piattaforme con risultati identici e non a tema).

Nota: Le finestre di dialogo FileDialog comuni (askopenfilename, askopenfilenames, asksaveasfilename, askdirectory) sono tutti correttamente a tema.

import tkMessageBox as messagebox 
messagebox.showinfo() 

import tkColorChooser as colorchooser 
color = colorchooser.askcolor(parent=root, title='Customize colors') 

Tutte le idee su ciò che è necessario per ottenere ColorChooser finestre di dialogo comune di MessageBox Tkinter e ad essere tema OS compatibile (almeno in Windows XP o superiore)?

+0

Questa è una grande cattura. Ho intenzione di portarlo al Bug Tracker di Python e vedere se possiamo fare qualche progresso. –

+0

Rafe: Grazie per aver aggiornato il Bug Tracker di Python con questo problema. Sarei più che felice di aiutare a correggere questo problema. Non sono sicuro di poter contribuire al codice, ma sarei felice di testare eventuali correzioni di codice su più versioni di Windows, ad es. XP, Vista, Windows 7. – Malcolm

+0

Ecco un link al problema, puoi sempre guardare la fonte e vedere se c'è un modo per correggere la fonte. Il modo in cui funzionano le cose, mentre non è possibile commettere unilateralmente il codice, chiunque può scrivere patch e guardarle. http://bugs.python.org/issue10171 –

risposta

2

L'osservazione è principalmente corretta. Vedo a cosa ti riferisci nello messagebox e nello colorchooser. Tuttavia, i miei file di registro sembrano avere pulsanti correttamente arrotondati, ecc.

La mia raccomandazione per voi di creare la messagebox è creare la vostra casella di messaggio utilizzando il widget TopLevel e quindi definire cosa vi serve su di esso e il comportamento appropriato per i diversi pulsanti (è decisamente un po 'più difficile dell'utilizzo di una messagebox, ma se hai davvero bisogno dei nuovi pulsanti di stile, funzionerà).

Non penso che sia possibile risolvere insieme una soluzione per il problema colorchooser.

Ho pensato per un minuto che forse Python 3.1 avesse risolto questo problema, ma purtroppo ho provato e non è così. Suppongo che se hai bisogno che l'utente scelga un colore, i pulsanti dovranno essere brutti.

+0

Rafe: Sì, sei corretto ... i file filtrati eseguono il rendering come previsto con il supporto dei pulsanti a tema (arrotondati). La mancanza di supporto per i temi sembra essere limitata alle finestre di dialogo messagebox e colorchooser. – Malcolm

+0

Ho anche notato la seguente stranezza: Tutti i display filedialogs (e colorchooser) relativi all'angolo in alto a sinistra della finestra genitore ... TRANNE la finestra di dialogo askdirectory() che si centra sul desktop. – Malcolm

+0

@Malcolm: è piuttosto strano. Non penso che lo noterei mai in modo indipendente. –

0

Un'opzione per ottenere finestre di dialogo di migliore aspetto è compilare lo script su un eseguibile utilizzando pyinstaller. Spiego questo più profondamente here.

tl; dr, sembra che la compilazione con pyinstaller consente di avere finestre di dialogo con lo stile del SO attualmente in esecuzione, ma non gli stili personalizzati.