Pysimplegui: [Question] * UTILISATEURS MAC * no_titlebar fonctionne-t-il pour vous?

Créé le 28 oct. 2020  ·  30Commentaires  ·  Source: PySimpleGUI/PySimpleGUI

Type de problèmes (amélioration, erreur, bogue, question)

Bug / problème avec tkinter

No_titlebar fonctionne-t-il?
Les info-bulles fonctionnent-elles?

Système opérateur

Mac

Version Python

3.6+

Port et version de PySimpleGUI

C'est là que les choses deviennent importantes à comprendre.

Je voudrais savoir de quelqu'un exécutant 8.610 et aussi quelqu'un qui n'exécute pas 8.6.10.

J'essaie de comprendre si cela est spécifique à 8.6.10.

Vous pouvez obtenir la version détaillée de tkinter en ajoutant cette ligne à votre code:

print(sg.tkinter.Tcl().eval('info patchlevel'))

Description du problème / question / détails

Je me souviens des problèmes de no_titlebar sur Mac et j'aimerais faire un effort concerté pour les résoudre en cas de problème. J'ai vraiment besoin d'une aide solide de la part de quelques utilisateurs de Mac.

J'ai besoin de quelqu'un qui peut faire ceci:

  • Obtenez des informations précises sur la version de tkinter (le code est fourni)
  • Pouvoir essayer quelques correctifs potentiels lors de leur publication sur GitHub

Code à dupliquer

Un programme court qui isole et démontre le problème (c'est-à-dire ne collez pas de lien vers votre programme de 400 lignes ... à la place, collez votre programme de 10 lignes en entier).

Oui, il est difficile de réduire les problèmes, mais cela fait partie du processus de débogage. Aidez-moi à vous aider en fournissant quelque chose qui peut être exécuté afin que le travail pour vous obtenir un correctif ou une solution de contournement puisse commencer immédiatement.

Ce bloc de code pré-formaté est prêt à être collé dans votre morceau de code:

print(sg.tkinter.Tcl().eval('info patchlevel'))

Vous pouvez tester pour voir si vous avez des problèmes en exécutant:

import PySimpleGUI as sg

sg.popup_no_titlebar('This should not have a titlebar')

image

Mac Specific Issue community input desired help wanted

Tous les 30 commentaires

Une partie du problème du débogage dans le passé est qu'il n'y avait jamais vraiment de table appropriée pour aider au débogage. Il y a 3 variables en jeu:

  1. Version PySimpleGUI
  2. version tkinter
  3. Version MacOS

La plupart du temps, c'est la version tkinter qui a été au centre des préoccupations. Je ne sais pas si tkinter est responsable de tous les problèmes rencontrés.

Voici ma ventilation:

PySimpleGUI v4.30.0
tkinter v8.6
MacOS 10.15.7

Je tiens également à mentionner que j'utilise Homebrew pour mes binaires python.

Screen Shot 2020-10-28 at 8 10 31 PM

Éditer:

Python v3.8.1

macOS High Sierra version 10.13.6
PySimpleGUI version 4.30.0.12
tcl ver = 8.6 version tkinter = 8.6
tcl version détaillée = 8.6.10
Python version 3.8.6

Et il fonctionne!
it_works

edit: L'environnement qui m'a donné le moins de maux de tête concernant tkinter:

Homebrew -> brew install tcl-tk
Homebrew -> brew install pyenv -> Python (voir ci-dessous)

env \
  PATH="$(brew --prefix tcl-tk)/bin:$PATH" \
  LDFLAGS="-L$(brew --prefix tcl-tk)/lib" \
  CPPFLAGS="-I$(brew --prefix tcl-tk)/include" \
  PKG_CONFIG_PATH="$(brew --prefix tcl-tk)/lib/pkgconfig" \
  CFLAGS="-I$(brew --prefix tcl-tk)/include" \
  PYTHON_CONFIGURE_OPTS="--enable-framework --with-tcltk-includes='-I$(brew --prefix tcl-tk)/include' --with-tcltk-libs='-L$(brew --prefix tcl-tk)/lib -ltcl8.6 -ltk8.6'" \
  pyenv install 3.8.6

pyenv global 3.8.6

et pour en faire mon python par défaut:

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

J'ai suivi toutes les étapes énumérées par @norambna et je l'ai fait fonctionner pour moi. C'était un peu encombrant de sauter à travers tous les cerceaux.

Python v3.8.6
PySimpleGUI v4.30.0
tkinter v8.6
MacOS 10.15.7
pyenv v1.2.21
tcl-tk v8.6.10

image

Je suis content que cela ait aidé! Je sais que j'ai eu du mal à trouver une solution à tous mes problèmes macOS / tkinter. Cela ne résoudra pas tous les problèmes de tkinter, mais c'est clairement la meilleure façon de l'utiliser sur macOS.

La version 8.6.10 de tkinter semble-t-elle résoudre ce problème?

Si toutes les versions ont des problèmes à l'exception de la version 8.6.10, alors je pourrais vérifier cette version et appliquer le "correctif" uniquement aux versions non 8.6.10.

Ce qui m'a vraiment confus, c'est s'il s'agit d'un problème récent ou si aucune barre de titre n'a jamais fonctionné sur le Mac. Il semble étrange que cela n'ait jamais fonctionné, mais c'est difficile à dire avec certitude.

Le "correctif" que j'ai vu va potentiellement casser d'autres choses, c'est pourquoi j'ai hésité à l'ajouter au code.

Ces étapes sont assez laides, donc je pense que je dois faire quelque chose à ce sujet. On ne peut pas s'attendre à ce que les utilisateurs rencontrent autant de problèmes. Je vais rassembler une version pour GitHub avec le correctif qui vérifie le numéro de version de tkinter et ne l'applique que lorsque la version n'est pas la 8.6.10.

La version 8.6.10 de tkinter semble-t-elle résoudre ce problème?

Pour moi oui. 8.6.10 résout une tonne de problèmes.

Je viens de publier 4.30.0.13 qui contient un correctif si la version est inférieure à 8.6.10.

Si cela "résout" le problème, je veux essayer un autre correctif. Ce nouveau patch efface l'indicateur wm_overremedirect après l'avoir défini pour la première fois.

root.wm_overrideredirect(True)
root.wm_overrideredirect(False)

Ce que je voudrais essayer ensuite est de le redéfinir sur True afin que l'opération soit un True False True. L'idée ici est que pour certains systèmes, cela peut fonctionner correctement si la valeur est définie sur True. Ce que je ne veux pas faire, c'est interrompre toutes les installations là où il fonctionne correctement aujourd'hui et le redéfinir sur True peut fournir une solution de contournement qui fait ce qu'il faut sur toutes les versions de tkinter sur Mac.

Vous verrez ce message imprimé sur la console si le patch est appliqué:
* Applying Mac no_titlebar patch *

Une façon de tester cela est d'utiliser le faisceau de test qui vous évitera d'avoir à écrire du code pour appeler et tester les popups. L'un des onglets du faisceau de test (appelé en exécutant le fichier PySimpleGUI.py ou en appelant sg.main() ) est utilisé pour tester les fenêtres contextuelles.

image

Cela vous permettra de vérifier rapidement à la fois la fenêtre sans barre de titre et d'appeler des fenêtres contextuelles avec une barre de titre.

Il peut être difficile à repérer car l'arrière-plan est le même que votre fenêtre de test. Si vous cliquez sur le bouton No Titlebar , vous verrez cette petite fenêtre

image

J'espère que cela corrige la version non 8.6.10 et ne fonctionne pas sur 8.6.10+. Si ce n'est pas le cas, je vais rapidement mettre en place un autre test pour voir si la réinitialisation fonctionne à nouveau.

Si nous y parvenons, je publierai la version sur PyPI en tant que version hautement prioritaire.

J'ai besoin de l'aide des utilisateurs de Mac

Un correctif a été posté sur GitHub pour essayer de contourner ce problème d'absence de barre de titre. J'ai besoin de comprendre si:

  • Le correctif résout le problème sur les systèmes non 8., 6.10
  • Le patch ne pose aucun problème avec la version 8.6.10

Quelqu'un peut-il télécharger la version GitHub et l'essayer?

J'adorerais aider. J'ai tout configuré en ce qui concerne la version tkinter, mais je ne sais pas comment importer la version 4.30.0.13 de PySimpleGUI. Comment télécharger cette version et l'utiliser exactement?

Il devrait être avec le même correctif dans la plupart des versions de mise à jour.

Mise à niveau depuis GitHub à l'aide de PySimpleGUI

Je ne sais pas quoi faire à propos de ce patch. Je suis en train de rassembler une version de PyPI maintenant et sans qu'elle soit correctement testée sur un Mac, je vais devoir extraire le code de la version. Je préfère publier un problème connu que potentiellement un nouvel ensemble de problèmes. Bien sûr, ma préférence est de corriger cela pour de bon et de publier sur PyPI.

S'il y a des utilisateurs Mac capables d'exécuter quelques tests, moi, et je suppose que quelques-uns de vos collègues utilisateurs Mac, apprécierions l'aide.

Je ne veux pas retarder la sortie en attendant que les utilisateurs Mac testent le nouveau code. J'ai donc ajouté plus de code pour contrôler le moment où le patch est exécuté. Je ne peux pas simplement jeter ce «correctif» là-bas et potentiellement casser les utilisateurs Mac existants. Eh bien, techniquement, je pourrais, mais je préfère ne pas créer de problèmes pour les utilisateurs qui ont un code fonctionnel aujourd'hui.

Pour activer le correctif pour les fenêtres sans barre de titre sur un Mac, appelez set_options avec le paramètre enable_mac_notitlebar_patch défini sur True.

    sg.set_options(enable_mac_notitlebar_patch=True)

Le patch provoquera un appel supplémentaire lors de la création d'une fenêtre sans barre de titre:

root.wm_overrideredirect(False)

Le correctif ne s'exécutera que sur les Mac exécutant des versions de tkinter <8.6.10.

Par défaut, le patch est désactivé. Vous devez prendre des mesures positives pour obtenir le correctif en appelant set_options .

Ce code est en version 4.30.0.26 et est maintenant sur GitHub. Il sortira prochainement en version 4.31.0.

Comme je l'ai déjà dit, je serais prêt à exécuter des tests sur votre correctif précédent. J'ai deux appareils Mac différents exécutant différentes versions du système d'exploitation. J'utilise également différentes versions de python et tcl / tk.

Toutes mes excuses si c'est une question stupide, mais comment installer ces versions (4.30.0.13 ou 4.30.026)? J'utilise habituellement pip install, mais si j'ai fait quelque chose de différent, j'ai besoin d'un peu de conseils pour vous aider.

4.31.0 a été posté sur PyPI plus tôt dans la journée. Vous pouvez l'installer comme si vous aviez d'autres versions.

Ajoutez la ligne de code dans l'article précédent et vous exécuterez avec le correctif activé.

 sg.set_options(enable_mac_notitlebar_patch=True)

Vous pouvez installer les versions de GitHub en utilisant l'interface utilisateur de sg.main () en cliquant sur le bouton rouge qui dit "Upgade". 4.31.0 est la version actuelle sur GitHub et celle qui a été publiée sur PyPI.

J'ai fait quelques tests différents sur différentes versions de tcl / tk (8.5.9, 8.6.8, 8.6.10) et j'ai trouvé que le code d'origine
image
fera apparaître la barre de titre désactivée, mais je peux cliquer sur le bouton réduire ou x. Si je le minimise puis le ramène, la barre de titre est complètement désactivée. Cela se produit à la fois sur 8.5.9 et 8.6.8. Tout fonctionne bien pour 8.6.10. (comme mentionné dans les commentaires précédents)

Ensuite, j'ai essayé de l'exécuter avec votre patch.
image
Ce qui a fini par se produire, c'est que la barre de titre était active et que les boutons minimiser et x fonctionnaient, et quand je l'ai minimisé et ramené la fenêtre, elle était alors désactivée, similaire à ce que j'ai mentionné ci-dessus.

Les problèmes persistent donc avec les versions 8.6.8 et inférieures.

Voici le code original utilisant tkinter pour obtenir une fenêtre déplaçable sans barre de titre.
image
J'ai trouvé ce code lorsque je cherchais pour essayer de résoudre ce problème d'essayer de masquer la barre de titre. Ceci utilise tcl / tk 8.6.8 ou moins
https://stackoverflow.com/questions/29641616/drag-window-when-using-overremedirect

Versions
MacOS: 10.15.7
PySimpleGUI: 4.31.0 dernière
Python: 3.8.1, 3.8.6, 3.9.0

Pour tcl / tk 8.6.8 ou inférieur
ni patch ni exemple original

Avez-vous vu un message sur la console indiquant que le correctif était appliqué?

Ce qui est étrange avec les tests, c'est que la technique que j'utilise pour obtenir la barre sans titre est celle qui a été précédemment publiée ici. Il s'agit essentiellement de répéter le remplacement, mais avec une valeur False. Il est également étrange qu'il y ait un comportement de verrouillage qui semble être nouveau.

Pouvez-vous vous assurer que vous voyez ce message:

'* Applying Mac no_titlebar patch *

Si vous ne voyez pas ce message, c'est que le correctif n'a pas été appliqué.

Il serait utile que vous imprimiez la version de PySimpleGUI en plus d'imprimer la version de tkinter juste pour être sûr que nous travaillons avec la combinaison de variables que nous pensons être.

Je soupçonne de plus en plus que le MacOS a également un rôle à jouer ici. Je n'ai entendu parler de ce problème sans barre de titre et du problème des info-bulles que plus tôt cette année. Ces fonctionnalités ont été parmi les premières à être publiées dans PySimpleGUI, et pourtant aucun problème avec ces fonctionnalités n'a été signalé jusqu'à il n'y a pas si longtemps.

La partie glisser-n'importe où de ceci n'a pas été discutée auparavant et est de nouvelles données. Pouvons-nous nous concentrer uniquement sur le test et le fonctionnement du code sans barre de titre?

Le "correctif" pour cela peut très bien finir par être que les utilisateurs de Mac doivent exécuter tkinter 8.6.10. Je passe trop de temps et d'énergie sur un problème qui est clairement un bogue dans le logiciel Mac. Ne pas pouvoir tester le code rend cette tâche presque impossible à accomplir.

Je suis déjà venu ici une fois avec le bogue du bouton tk, qui était un problème connu depuis plus de 6 ans et qui n'a pas encore été corrigé. Le correctif pour cela était d'ajouter la prise en charge des boutons ttk à PySimpleGUI. C'était beaucoup de travail, mais a finalement permis aux utilisateurs de Mac d'utiliser PySimpleGUI. Contrairement à ce bogue, celui-ci semble avoir attiré l'attention des développeurs de tkinter / Mac et il a été corrigé en 8.6.10. Cela signifie que les utilisateurs de Mac doivent suivre un chemin qu'ils peuvent accéder par eux-mêmes, sans que ces types de piratages et de solutions de contournement ne soient ajoutés au code.

J'aime mes utilisateurs Mac, mais il est difficile de justifier un investissement excessif dans la prise en charge de cette plate-forme lorsque le nombre d'utilisateurs est minime. Je ne pense pas que les installations aient jamais cassé 10% pour le Mac.

image

Oui, cela semble être un énorme problème pour un petit groupe d'utilisateurs. Je viens de télécharger macOS v11 (nouveau cette semaine), et il semble y avoir un comportement différent. Par exemple, les boutons minimiser et x sont maintenant complètement désactivés contrairement à mon article précédent.

Une chose que j'ai également remarquée avec tkinter sur macOS v11 est que pour tk / tcl v8.5.9, je n'ai qu'à dire root.overrideredirect(True) pour aucune barre de titre, mais quand j'essaye de faire de même sur tk / tcl v8.6.8 ça ne marche pas. J'ai encore besoin de faire

root.overrideredirect(True)
root.overrideredirect(False)

afin de le faire fonctionner.

FYI, je recevais le message du journal indiquant que le correctif était appliqué. De plus, la version de PySimpleGUI que j'utilisais était la 4.31.0 publiée le 13 novembre 2020.

Cela ne me dérange pas de prendre en charge un petit groupe d'utilisateurs avec du code spécifique à la plate-forme Mac. Le problème est que c'est une cible mouvante. Je n'ai pas pu trouver une base stable récemment. Les choses se passaient apparemment bien après que les utilisateurs de Mac soient passés à l'installation de Python.org au lieu de Homebrew. Cela a éloigné tout le monde des versions qui avaient des problèmes avec les boutons et les tables. Mais alors quelque chose semble avoir changé. Je pense que quelque chose était probablement le Mac OS.

Comme je l'ai mentionné plus tôt, il y a 3 variables en jeu. Il existe la version tkinter, la version PySimpleGUI et la version MacOC. Je jette la version Python de cette liste car bien que tkinter soit packagé avec Python et puisse différer d'une version de Python à une autre, tant que nous suivons la version de tkinter, la version Python n'a pas d'importance. Je n'ai pas une idée du résultat, c'est que les combinaisons sont pour ces 3 variables autres qu'un rapport occasionnel que "ça ne marche pas".

Faire quoi que ce soit avec 8.5.9, c'est aller trop loin en arrière. PySimpleGUI prend en charge Python 3.4 et plus, qui remonte à 6 ans. Cela a été un défi, mais qui est raisonnable car le Raspberry Pi est souvent livré avec cette version de Python. Je ne peux pas faire grand-chose pour contourner ce problème si ce n'est de forcer les utilisateurs de Pi à mettre à jour leur version Python et je préférerais que cela ne se produise pas car ce n'est pas une chose triviale à faire.

8.5.9 est sorti il ​​y a plus de 10 ans. Un peu de contexte ... la même année, la version 8.5.9 est sortie, donc la version 2.7.0. Python 3 était à 3,1. Cela remonte bien trop loin pour avoir une valeur réelle. Je comprends le contexte dans lequel vous l'utilisez, qui est de démontrer qu'à un moment donné, aucune barre de titre ne fonctionnait, mais remonter une décennie pour trouver une version fonctionnelle de quoi que ce soit est assez extrême. C'est toute une vie dans le logiciel.

Entendre que MacOS v11 a une incidence sur le fonctionnement de tkinter est encore plus exaspérant. Le système d'exploitation lui-même ne devrait avoir aucun impact ... zéro ... sur le fonctionnement de tkinter et Python.

Il est décevant d'entendre que le correctif n'a pas eu d'impact positif puisque ce qu'il fait a remis le wm_overremedirect sur False, ce qui est censé résoudre le problème. Voici le code qui est exécuté pour aucune barre de titre sur un Mac:

                MyFlexForm.TKroot.wm_overrideredirect(True)
                # Special case for Mac. Need to clear flag again if not tkinter version 8.6.10+
                if sys.platform.startswith('darwin') and ENABLE_MAC_NOTITLEBAR_PATCH and (sum([int(i) for i in tclversion_detailed.split('.')]) < 24):
                    print('* Applying Mac no_titlebar patch *')
                    MyFlexForm.TKroot.wm_overrideredirect(False)

Le message "Application Mac no_titlebar patch" s'affiche juste avant de remettre wm_overremedirect sur False.

J'adorerais publier une version de PySimpleGUI qui fonctionne avec toutes les versions de Mac OS sur toutes les versions de tkinter, mais c'est ce que j'ai essayé de faire depuis le lancement initial de PySimpleGUI, et il semble que les derniers efforts aient échoué.

Le seul correctif de travail connu que je connaisse à ce stade est de demander aux utilisateurs Mac d'installer 8.6.10. Cela semble produire des résultats qui fonctionnent. Le «correctif» de PySimpleGUI se présente comme un message d'erreur qui s'affiche lorsque quelqu'un tente de créer une fenêtre sans barre de titre ou tente de définir des info-bulles. C'est une solution terrible du point de vue de la convivialité, mais je ne vois pas d'autre issue. Cela bat le fait d'exiger que les utilisateurs installent une version vieille de dix ans de tkinter.

Je suis préoccupé par l'utilisation des installations homebrew de Python et tkinter. Ce n'est que l'année dernière que nous avons découvert que l'homebrew était la source des problèmes et que l'installation à partir de Python.org résolvait ces problèmes.

Si vous voulez essayer d'ajouter des appels supplémentaires à wm_overrideredirect ou effectuer une autre opération sur l'objet tkinter root , vous pouvez y accéder directement en utilisant la variable membre Window window.TKroot . Peut-être que vous pouvez trouver une combinaison d'appels qui fonctionnera. Je frappe évidemment.

Je ne pense pas qu'ils soient liés, mais vous pouvez essayer de désactiver le paramètre modal pour la fenêtre comme test.

Je veux juste clarifier quelque chose à propos de tk / tcl 8.5.9 ... la seule raison pour laquelle j'utilisais cette version est qu'elle était fournie avec l'installation homebrew python 3.9.1. J'utilisais juste ce qu'ils m'ont donné. Donc, comme vous l'avez dit, cela peut être un problème de homebrew.

Je vais jouer un peu avec le téléchargement de certaines des versions de python.org. Je n'ai aucun problème à vous aider à comprendre cela. Peut-être que je pourrais faire des tests un peu plus contrôlés pour les différentes variables en jeu. Cela peut me prendre un peu de temps pour le faire, mais si vous avez des choses spécifiques que vous voulez que j'essaye autres que celles que vous avez mentionnées précédemment, faites-le moi savoir.

Une autre chose que je voulais mentionner est lorsque j'utilise tkinter et que je fais l'appel root.overrideredirect(True) une fenêtre n'apparaîtra même pas. Donc, il se passe un peu plus ici si vous me le demandez, car lors de l'utilisation de PySimpleGUI, la fenêtre apparaîtra bien qu'elle ne supprime pas la barre de titre, elle ne fait que la désactiver. (pour les versions <8.6.10)

Je n'ai aucun problème à vous aider à comprendre cela.

Eh bien ... Je vais sauter sur cette opportunité. Je voudrais résoudre ce problème afin que les utilisateurs Mac ne soient pas obligés d'installer 8.6.10. Ce n'est pas une chose facile à faire, comme l'ont montré les commentaires ci-dessus.

tk / tcl 8.5.9 ... la seule raison pour laquelle j'utilisais cette version est qu'elle était fournie avec l'installation homebrew python 3.9.1.

WOW .... sautez tout droit WOW ....

Quel exemple graphique de la raison pour laquelle l'utilisation de Homebrew pour l'installation de Python n'est pas une bonne idée. D'un côté, je pouvais voir quelqu'un dire ça parce que "ça marche" alors c'est bien à utiliser, mais ce n'est pas si simple. La quantité de code tkinter ajoutée depuis la version 8.5.9 doit être importante car tkinter n'est pas resté immobile depuis une décennie.

Je trouve que c'est une excellente nouvelle. :-( Quelle bataille difficile.

Veuillez essayer d'installer à partir de Python.org. Il y a quelque temps, j'ai ajouté la nécessité d'installer à partir de Python.org à la documentation:

https://pysimplegui.readthedocs.io/en/latest/#macs

C'est tellement étrange que ces problèmes semblent venir de nulle part. Même si le nombre d'utilisateurs Mac est petit, ils existent et utilisent PySimpleGUI sur tkinter. Je suis sûr que si cette fonctionnalité avait été cassée il y a 2 ans, quelqu'un aurait dit quelque chose. Ils se sont certainement plaints des problèmes de couleur des boutons.

Ce serait bien si les tests étaient soigneusement organisés et suivis. Une matrice de combinaisons serait très utile.

_Je voudrais voir s'il existe un moyen d'essayer d'anciennes versions de tout, puis d'avancer jusqu'à ce que quelque chose se brise ._

Ce serait mon plan idéal.

Juste mes 2 cents. Je ne suis pas un utilisateur Mac, mais j'ai dû développer quelque chose en python pour macOS, c'est donc de là que j'ai tiré mon expérience limitée.

Il y a quelques mois, lorsque j'ai essayé mes options, j'ai essayé des versions de python téléchargées directement depuis python.org. À ce moment-là, je passe beaucoup de temps avec la version 3.6.8 de python.org, qui est fournie avec Tcl / Tk 8.6.8. Et il y a définitivement des bugs lors de l'essai des différents éléments de PySimpleGUI. Je pense que c'est juste tkinter, ce n'est pas si poli pour macOS. Par défaut, la version Homebrew de Python NE vient PAS avec Tcl / Tk (voir ici et ici ), mais bien sûr il y a probablement beaucoup de "brews" non officiels. La version Pyenv n'est pas fournie avec Tcl / Tk. J'ai utilisé l'astuce que j'ai postée ci-dessus pour essayer Tcl / Tk 8.6.10. Comme je l'ai dit, ce n'est toujours pas parfait, mais dans mes tests, c'était définitivement la meilleure option. J'ai dû créer un produit, j'ai testé ce qui fonctionnait et ce qui ne fonctionnait pas, et j'ai utilisé les choses qui fonctionnaient pour mon projet.

BTW, les fenêtres modales ne fonctionnent pas avec python.org version 3.6.8, qui est fournie avec Tcl / Tk 8.6.8 et elles posent également des problèmes avec un python pyenv et Tcl / Tk 8.6.10. Regardez ici .

edit: et macOS est livré avec Tcl / Tk 8.5.9 dans le cadre du système d'exploitation. C'est pourquoi vous obtenez cette version si votre python n'est pas livré avec une version plus récente Tcl / Tk. Donc, si vous utilisez une installation standard de python, ce python utilisera la version Tcl / Tk fournie avec le système d'exploitation. C'est pourquoi vous obtenez Tcl / Tk 8.5.9 lorsque vous utilisez un python homebrew régulier. Et c'est pourquoi mon astuce doit explicitement indiquer au python de pyenv d'utiliser la nouvelle installation de brassage de tcl-tk

Oh ... j'ai oublié ce truc modal.

Les tests contextuels que nous avons exécutés peuvent être essayés avec la fonction modale désactivée.

@tkozzer .... pouvez-vous essayer ce test contextuel?

sg.popup_no_titlebar('This should not have a titlebar', modal=False)

Aussi, juste pour être sûr que drag_anywhere ne pose pas de problème, essayez également cette fenêtre contextuelle.

sg.popup_no_titlebar('This should not have a titlebar', modal=False, grab_anywhere=False)

Pour obtenir le maximum de contrôle et de visibilité sur les options définies, passer à la création d'une fenêtre est probablement un meilleur moyen de tester. Voici un programme avec lequel nous pouvons travailler sur ce problème:

import PySimpleGUI as sg


layout = [[sg.Text('A no-titlebar test')],
          [sg.Button('Ok'), sg.Button('Exit')]]

window = sg.Window('Title', layout, no_titlebar=True, grab_anywhere=False, modal=False)

while True:
    event, values = window.read()
    print(event, values)
    if event in (sg.WIN_CLOSED, 'Exit'):
        break

window.close()

Je suis en train de préparer une version aujourd'hui car il y a des changements qui doivent être rapidement mis à PyPI. Si les fenêtres modales sont effectivement cassées pour le Mac, à tous les niveaux, pour toutes les versions de tkinter, je les désactiverai dans cette version. Quelqu'un peut-il vérifier que les fenêtres modales ne fonctionnent pas correctement pour la version 8.6.10 et d'autres versions? Je ne suis toujours pas clair sur les combinaisons de tkinter et de MacOS qui produisent ces différents problèmes.

Je peux confirmer que les fenêtres modales ne fonctionnent pas pour python.org python 3.6.8 fourni avec Tcl / Tk 8.6.8. Et ils ne fonctionnent pas pour le python 3.6.11 de pyenv fonctionnant avec Tcl / Tk 8.6.10 de Homebrew. Ce sont les seules versions que j'ai essayées avec ce problème particulier.

pyenv ne fournit aucun paquet / bibliothèque à lui seul. Cela aide à la configuration. Vous devez toujours choisir ce que vous voulez installer et ensuite ce que vous voulez basculer.

Pour le Mac, la version Python n'a pas autant d'importance que le tkinter et je pense que la version MacOS. tkinter 8.6.8 devrait fonctionner exactement de la même manière sur 3.6, 3.7, 3.8, 3.9. Ce qui peut varier, c'est quelle verrsion de tkinter est installée lorsque vous installez 3.6, 3.7, etc., au moins sur Windows. Une des raisons pour obtenir Python à partir de Python.org est que vous obtenez une version spécifique de tkinter fournie avec l'installation.

la version Python n'a pas autant d'importance que le tkinter et je pense que la version MacOS

macOS High Sierra Version 10.13.6 pour tous mes tests.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

eyeonus picture eyeonus  ·  6Commentaires

mozesa picture mozesa  ·  5Commentaires

MikeTheWatchGuy picture MikeTheWatchGuy  ·  6Commentaires

flowerbug picture flowerbug  ·  4Commentaires

yogesh-aggarwal picture yogesh-aggarwal  ·  3Commentaires