La première des choses à revoir, est le relancement de l'application lors des mises à jour des couleurs, non seulement ce n'est pas propre, mais en plus cela provoque des erreurs comme.
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/lib/python3.6/tkinter/init.py", line 1699, in call
return self.func(*args)
File "main.py", line 69, in
label=i, background=i, command=lambda x=i: self.setcolors(x)
File "main.py", line 102, in setcolors
os.execv(file, sys.argv)
PermissionError: [Errno 13] Permission denied
Il n'est pas bien difficile de mettre à jour en temps réel les couleurs des widgets.
Puis c'est plus de l'ordre du gadget que de pouvoir changer les couleurs des horloges.
Ce qui serait intéressant serait que tu génères une couleur en t'appuyant sur le string du timezone, ou alors plus simplement des couleurs aléatoires selon des tons de couleurs prédéfinis.
Garde tkinter dans sa boîte, c'est pas bien plus complexe et verbeux d'écrire tk.Menu que Menu, dans le premier cas on sait d'où sort la classe Menu dans le second non, dans ton petit script on ne s'y perd pas, mais dans des scripts plus conséquents, on peut vite s'y perdre et être source de collisions d'identifiants. Importer un ou deux trucs d'un module, cela passe, mais au-delà mieux vaut garder le module importé dans son namespace.
Généralement les utilisateurs n'apprécient pas trop les fenêtres qui changent de dimensions, je suis dans ce cas, ce que j'aurais fait à ta place est de créer une fenêtre ou l'on pourrait placer par exemple 4 horloges au maximum (pouvant être pourquoi pas défini via une constante ou un argument facultatif de la classe App pour en mettre plus), le fait de cliquer sur un emplacement vide permettrait d'ajouter une nouvelle horloge, l'ajout d'un petit bouton sur chaque horloge serait suffisant pour les supprimer.
Le menu des timezones disponibles est trop long (scroll interminable), il faudrait faire quelque chose de plus élaboré, on choisirait d'abord le continent, puis ensuite le pays/ville, pour cela je te conseille d'utiliser la classe Listbox de tkinter.
Il y a des bugs lors des ajouts et suppressions d'horloges (pas pris en compte en temps réel).
Je ne comprends pas bien comment fonctionne ton fichier de couleurs, ce que j'aurais fait personnellement est de grouper timezone et couleurs en un unique dictionnaire ou autre structure de données.
Les secondes ne variant pas d'une horloge à l'autre, j'aurais pour ma part utilisé une unique variable commune à toutes les horloges afin de garder une synchro parfaite entre les horloges.
Les appels en ms étant toujours imprécis, le 1000ms peut très bien être 1002ms effectif, cela varie d'un poste à un autre et en fonction des tâches en cours, ce qui fait qu'au bout d'un long moment il y aura des décalages (même en essayant d'ajuster les ms en se basant sur les microsecondes de datetime, je ne suis pas arrivé à obtenir une synchro aux petits oignons).
N'est-ce pas d'ailleurs pour cette raison que tu as enlevé les secondes des horloges et que tu fais des appels toutes les 500ms ?
Je pense que pour obtenir une synchronisation plus élaborée il faudrait utiliser un thread séparé, et ce n'est pas facile à faire.
Dans ta classe App, il faudrait répartir ce qui peut l'être dans différentes classes, chargement et enregistrement des timezones, fenêtre de création d'un timezone. Il en va de même pour ta classe Clock, tu pourrais répartir chaque zone d'affichage en d'autres classes (date, timer, timezone).
Focalise-toi d'abord sur l'essentiel, les choses comme souhaiter la bonne année, ou changer les couleurs sont d'importances secondaires.
# Plusieurs bugs
Posté par gled . En réponse au message Deuxième mouture script multi clock. Évalué à 1.
La première des choses à revoir, est le relancement de l'application lors des mises à jour des couleurs, non seulement ce n'est pas propre, mais en plus cela provoque des erreurs comme.
Il n'est pas bien difficile de mettre à jour en temps réel les couleurs des widgets.
Puis c'est plus de l'ordre du gadget que de pouvoir changer les couleurs des horloges.
Ce qui serait intéressant serait que tu génères une couleur en t'appuyant sur le string du timezone, ou alors plus simplement des couleurs aléatoires selon des tons de couleurs prédéfinis.
Garde tkinter dans sa boîte, c'est pas bien plus complexe et verbeux d'écrire tk.Menu que Menu, dans le premier cas on sait d'où sort la classe Menu dans le second non, dans ton petit script on ne s'y perd pas, mais dans des scripts plus conséquents, on peut vite s'y perdre et être source de collisions d'identifiants. Importer un ou deux trucs d'un module, cela passe, mais au-delà mieux vaut garder le module importé dans son namespace.
Généralement les utilisateurs n'apprécient pas trop les fenêtres qui changent de dimensions, je suis dans ce cas, ce que j'aurais fait à ta place est de créer une fenêtre ou l'on pourrait placer par exemple 4 horloges au maximum (pouvant être pourquoi pas défini via une constante ou un argument facultatif de la classe App pour en mettre plus), le fait de cliquer sur un emplacement vide permettrait d'ajouter une nouvelle horloge, l'ajout d'un petit bouton sur chaque horloge serait suffisant pour les supprimer.
Le menu des timezones disponibles est trop long (scroll interminable), il faudrait faire quelque chose de plus élaboré, on choisirait d'abord le continent, puis ensuite le pays/ville, pour cela je te conseille d'utiliser la classe Listbox de tkinter.
Il y a des bugs lors des ajouts et suppressions d'horloges (pas pris en compte en temps réel).
Je ne comprends pas bien comment fonctionne ton fichier de couleurs, ce que j'aurais fait personnellement est de grouper timezone et couleurs en un unique dictionnaire ou autre structure de données.
Les secondes ne variant pas d'une horloge à l'autre, j'aurais pour ma part utilisé une unique variable commune à toutes les horloges afin de garder une synchro parfaite entre les horloges.
Les appels en ms étant toujours imprécis, le 1000ms peut très bien être 1002ms effectif, cela varie d'un poste à un autre et en fonction des tâches en cours, ce qui fait qu'au bout d'un long moment il y aura des décalages (même en essayant d'ajuster les ms en se basant sur les microsecondes de datetime, je ne suis pas arrivé à obtenir une synchro aux petits oignons).
N'est-ce pas d'ailleurs pour cette raison que tu as enlevé les secondes des horloges et que tu fais des appels toutes les 500ms ?
Je pense que pour obtenir une synchronisation plus élaborée il faudrait utiliser un thread séparé, et ce n'est pas facile à faire.
Dans ta classe App, il faudrait répartir ce qui peut l'être dans différentes classes, chargement et enregistrement des timezones, fenêtre de création d'un timezone. Il en va de même pour ta classe Clock, tu pourrais répartir chaque zone d'affichage en d'autres classes (date, timer, timezone).
Focalise-toi d'abord sur l'essentiel, les choses comme souhaiter la bonne année, ou changer les couleurs sont d'importances secondaires.
Bonne continuation !