2010-10-21 3 views
7

Windows Python 2.7 (32 bits): Nous expérimentons avec le support de Python 2.7 pour Tkinter (ttk) pour des interfaces graphiques simples et sommes repartis très impressionnés !! Le seul domaine dans lequel la nouvelle prise en charge de thème semble avoir été réduite est la manière dont les boîtes de dialogue communes spécifiques au système d'exploitation sont encapsulées.Python 2.7: Interfaces tkinter à "thème commun" à thème via Ttk?

Correction: En d'autres termes, les MessageBox et ColorChooser boîtes de dialogue communes ont « laid » à la recherche de style Win 95 polyédrique boutons à la recherche contre les boutons à thème (arrondi/gradient) qui montrent normalement sur ces boîtes de dialogue courantes sous XP, Vista, et Windows 7. (Je teste sur les 3 plates-formes avec des résultats identiques, non-thématiques).

Note: Les boîtes de dialogue communes (FileDialog askopenfilename, askopenfilenames, asksaveasfilename, askdirectory) sont tous correctement le thème.

import tkMessageBox as messagebox 
messagebox.showinfo() 

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

Toutes les idées sur ce qui est nécessaire pour obtenir Tkinter de MessageBox et ColorChooser dialogues communs pour être le thème du système d'exploitation compatible (au moins sous Windows XP ou supérieur)?

+0

C'est une belle prise. Je vais apporter ceci au Bug Tracker de Python et voir si nous pouvons faire des progrès. –

+0

Rafe: Merci d'avoir mis à jour le Python Bug Tracker avec ce problème. Je serais plus qu'heureux d'aider à corriger ce problème. Je ne suis pas sûr de ce que je peux contribuer au code, mais je serais heureux de tester les correctifs de code sur plusieurs versions de Windows, par exemple. XP, Vista, Windows 7. – Malcolm

+0

Voici un lien vers le problème, vous pouvez toujours regarder la source et voir s'il y a un moyen de corriger la source. La façon dont les choses fonctionnent est, tandis que vous ne pouvez pas commettre le code unilatéralement, n'importe qui peut écrire des correctifs et les faire regarder. http://bugs.python.org/issue10171 –

Répondre

2

Votre observation est principalement correcte. Je vois ce dont vous parlez dans le messagebox et le colorchooser. Toutefois, mes fichiers de requête semblent tous avoir des boutons correctement arrondis, etc.

Ma recommandation pour la création de la boîte de message est de créer votre propre boîte de message en utilisant le widget TopLevel, puis de définir ce dont vous avez besoin et le comportement approprié pour les différents boutons (c'est certainement un peu plus compliqué que d'utiliser un messagebox, mais si vous avez vraiment besoin des nouveaux boutons de style, ça marchera).

Cependant, je ne pense pas que vous puissiez bidouiller une solution pour le problème colorchooser.

Je pensais pendant une minute que peut-être Python 3.1 avait résolu ce problème, mais malheureusement, j'ai essayé et ce n'est pas le cas. Je suppose que si vous avez besoin de l'utilisateur pour choisir une couleur, les boutons devront être moche.

+0

Rafe: Oui, vous avez raison ... les filedialogs RENDENT comme prévu avec le support des boutons thématiques (arrondis). Le manque de support de thème semble être limité aux boîtes de dialogue messagebox et colorchooser. – Malcolm

+0

J'ai également remarqué la bizarrerie suivante: Tous les classials (et le colorchooser) s'affichent par rapport au coin supérieur gauche de la fenêtre parent ... SAUF la boîte de dialogue askdirectory() qui se centre sur le bureau. – Malcolm

+0

@Malcolm: c'est plutôt étrange. Je ne pense pas que je le remarquerais jamais de façon indépendante. –

0

Une option pour obtenir de meilleures boîtes de dialogue est de compiler votre script à un exécutable en utilisant pyinstaller. Je l'explique plus en détail here.

tl; dr, il semble que la compilation avec pyinstaller vous permet d'avoir des boîtes de dialogue avec le style du système d'exploitation en cours d'exécution, mais pas de styles personnalisés.