Pysimplegui: [Frage] * MAC USERS * funktioniert no_titlebar für Sie?

Erstellt am 28. Okt. 2020  ·  30Kommentare  ·  Quelle: PySimpleGUI/PySimpleGUI

Art der Probleme (Verbesserung, Fehler, Fehler, Frage)

Fehler / Problem mit tkinter

Funktioniert no_titlebar?
Funktionieren Tooltips?

Betriebssystem

Mac

Python-Version

3,6+

PySimpleGUI Port und Version

Hier wird es wichtig, die Dinge zu verstehen.

Ich würde gerne von jemandem wissen, der 8.610 ausführt, und auch von jemandem, der NICHT 8.6.10 ausführt.

Ich versuche zu verstehen, ob dies spezifisch für 8.6.10 ist.

Sie können die detaillierte tkinter-Version erhalten, indem Sie diese Zeile zu Ihrem Code hinzufügen:

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

Beschreibung des Problems / Frage / Details

Ich erinnere mich an no_titlebar-Probleme auf dem Mac und möchte konzertierte Anstrengungen unternehmen, um sie zu beheben, wenn es ein Problem gibt. Ich brauche wirklich solide Hilfe von ein paar Mac-Benutzern.

Ich brauche jemanden, der das kann:

  • Erhalten Sie genaue Informationen zur tkinter-Version (I-Code wird bereitgestellt)
  • In der Lage sein, einige mögliche Korrekturen auszuprobieren, wenn diese auf GitHub veröffentlicht werden

Zu duplizierender Code

Ein kurzes Programm, das das Problem isoliert und demonstriert (dh bitte fügen Sie keinen Link zu Ihrem 400-Zeilen-Programm ein ... fügen Sie stattdessen Ihr 10-Zeilen-Programm vollständig ein).

Ja, es ist mühsam, Probleme einzugrenzen, aber es ist Teil des Debugging-Prozesses. Helfen Sie mir, Ihnen zu helfen, indem Sie etwas bereitstellen, das ausgeführt werden kann, damit sofort mit der Arbeit an einem Fix oder einer Problemumgehung begonnen werden kann.

Dieser vorformatierte Codeblock ist so eingestellt, dass Sie Ihren Code einfügen können:

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

Sie können testen, ob Sie Probleme haben, indem Sie Folgendes ausführen:

import PySimpleGUI as sg

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

image

Mac Specific Issue community input desired help wanted

Alle 30 Kommentare

Ein Teil des Problems beim Debuggen in der Vergangenheit besteht darin, dass nie wirklich eine richtige Tabelle erstellt wurde, um das Debuggen zu erleichtern. Es spielen 3 Variablen eine Rolle:

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

Die meiste Zeit stand die tkinter-Version im Mittelpunkt. Ich bin mir nicht sicher, ob tkinter für alle aufgetretenen Probleme verantwortlich ist.

Hier ist meine Aufschlüsselung:

PySimpleGUI v4.30.0
tkinter v8.6
MacOS 10.15.7

Ich möchte auch erwähnen, dass ich Homebrew für meine Python-Binärdateien verwende.

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

Bearbeiten:

Python v3.8.1

macOS High Sierra Version 10.13.6
PySimpleGUI Version 4.30.0.12
tcl ver = 8.6 tkinter version = 8.6
tcl detaillierte Version = 8.6.10
Python Version 3.8.6

Und es funktioniert!
it_works

edit: Die Umgebung, die mir die wenigsten Kopfschmerzen in Bezug auf tkinter bereitet hat:

Homebrew -> Brew installieren tcl-tk
Homebrew -> Brew Install Pyenv -> Python (siehe unten)

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

und um dies zu meiner Standardpython zu machen:

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

Ich habe alle von @norambna aufgelisteten Schritte

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

Ich bin froh, dass es geholfen hat! Ich weiß, es fiel mir schwer, eine Lösung für alle meine macOS / tkinter-Probleme zu finden. Dies wird nicht alle tkinter-Probleme lösen, aber es ist eindeutig die beste Möglichkeit, unter macOS damit zu arbeiten.

Scheint es, dass tkinter Version 8.6.10 dieses Problem behebt?

Wenn alle Versionen außer 8.6.10 Probleme haben, könnte ich nach dieser Version suchen und das "Update" nur auf Nicht-8.6.10-Versionen anwenden.

Was mich wirklich verwirrt hat, ist, ob dies ein aktuelles Problem ist oder ob keine Titelleiste auf dem Mac funktioniert hat. Es scheint seltsam, dass es nie funktioniert hätte, aber es ist schwer zu sagen, sicher.

Das "Update", das ich gesehen habe, wird möglicherweise andere Dinge beschädigen, weshalb ich gezögert habe, es dem Code hinzuzufügen.

Diese Schritte sind ziemlich hässlich, also denke ich, dass ich etwas dagegen tun muss. Es ist nicht zu erwarten, dass Benutzer so viele Probleme haben. Ich werde eine Version für GitHub mit dem Fix zusammenstellen, der die tkinter-Versionsnummer überprüft und nur anwendet, wenn die Version nicht 8.6.10 ist.

Scheint es, dass tkinter Version 8.6.10 dieses Problem behebt?

Für mich ja. 8.6.10 löst eine Menge Probleme.

Ich habe gerade 4.30.0.13 gepostet, das einen Patch enthält, wenn die Version kleiner als 8.6.10 ist.

Wenn dies das Problem "behebt", möchte ich einen weiteren Patch ausprobieren. Dieser neue Patch löscht das Flag wm_overrideredirect nach dem ersten Setzen.

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

Als nächstes möchte ich versuchen, es erneut auf True zu setzen, damit die Operation True False True ist. Die Idee hier ist, dass es für einige Systeme möglicherweise richtig funktioniert, wenn der Wert auf True gesetzt ist. Was ich nicht tun möchte, ist, alle Installationen zu unterbrechen, bei denen es heute ordnungsgemäß funktioniert, und das erneute Setzen auf True bietet möglicherweise eine Problemumgehung, die auf allen Versionen von tkinter auf dem Mac das Richtige bewirkt.

Diese Meldung wird auf der Konsole angezeigt, wenn der Patch angewendet wird:
* Applying Mac no_titlebar patch *

Eine Möglichkeit, dies zu testen, ist das Testkabel, mit dem Sie keinen Code schreiben müssen, um Popups aufzurufen und zu testen. Eine der Registerkarten im Test-Harness (aufgerufen durch Ausführen der Datei PySimpleGUI.py oder Aufrufen von sg.main() ) wird zum Testen von Popups verwendet.

image

Auf diese Weise können Sie schnell sowohl das Fenster ohne Titelleiste als auch Popups mit einer Titelleiste aufrufen.

Es kann schwierig sein, es zu erkennen, da der Hintergrund mit Ihrem Testfenster übereinstimmt. Wenn Sie No Titlebar Schaltfläche

image

Ich hoffe, dass dies die Nicht-8.6.10-Version behebt und nicht auf 8.6.10+ läuft. Wenn dies nicht der Fall ist, stelle ich schnell einen weiteren Test zusammen, um festzustellen, ob das Zurücksetzen wieder funktioniert.

Wenn wir das festnageln, werde ich die Veröffentlichung als Veröffentlichung mit hoher Priorität auf PyPI veröffentlichen.

Ich brauche Hilfe von Mac-Benutzern

Es wurde ein Patch auf GitHub veröffentlicht, um dieses Problem ohne Titelleiste zu umgehen. Ich muss verstehen, wenn:

  • Der Patch behebt das Problem auf Nicht-8., 6.10-Systemen
  • Der Patch verursacht keine Probleme mit 8.6.10

Kann jemand die GitHub-Version herunterladen und ausprobieren?

Ich würde gerne helfen. Ich habe alles bis zur tkinter-Version eingerichtet, bin mir aber nicht sicher, wie ich die Version 4.30.0.13 von PySimpleGUI importieren soll. Wie genau laden Sie diese Version herunter und verwenden sie?

Es sollte mit dem gleichen Patch in den meisten Update-Versionen sein.

Upgrade von GitHub mit PySimpleGUI

Ich bin mir nicht sicher, was ich mit diesem Patch tun soll. Ich ziehe jetzt eine Version für PyPI zusammen und ohne dass sie auf einem Mac ordnungsgemäß getestet wurde, muss ich den Code aus der Version ziehen. Ich würde lieber ein bekanntes Problem veröffentlichen als möglicherweise eine ganze Reihe neuer Probleme. Natürlich ist es meine Präferenz, dies endgültig zu beheben und an PyPI zu senden.

Wenn es Mac-Benutzer gibt, die in der Lage sind, einige Tests durchzuführen, würde ich, und ich vermute, einige Ihrer Mac-Mitbenutzer, die Hilfe begrüßen.

Ich möchte die Veröffentlichung nicht verzögern, während ich darauf warte, dass Mac-Benutzer den neuen Code testen. Also habe ich mehr Code hinzugefügt, um zu steuern, wann der Patch ausgeführt wird. Ich kann dieses "Update" nicht einfach rauswerfen und möglicherweise vorhandene Mac-Benutzer beschädigen. Technisch könnte ich das, aber ich ziehe es vor, keine Probleme für Benutzer zu erstellen, die heute über funktionierenden Code verfügen.

Um den Patch für Fenster ohne Titelleiste auf einem Mac zu aktivieren, rufen Sie set_options wobei der Parameter enable_mac_notitlebar_patch auf True gesetzt ist.

    sg.set_options(enable_mac_notitlebar_patch=True)

Der Patch verursacht einen zusätzlichen Aufruf, wenn ein Fenster ohne Titelleiste erstellt wird:

root.wm_overrideredirect(False)

Der Patch wird nur auf Macs ausgeführt, auf denen tkinter-Versionen <8.6.10 ausgeführt werden.

Standardmäßig ist der Patch deaktiviert. Sie müssen positive Maßnahmen ergreifen, um den Patch zu erhalten, indem Sie set_options aufrufen.

Dieser Code ist in Version 4.30.0.26 und befindet sich jetzt auf GitHub. Es wird in Kürze in Version 4.31.0 veröffentlicht.

Wie ich bereits sagte, wäre ich bereit, Tests für Ihren vorherigen Patch durchzuführen. Ich habe zwei verschiedene Mac-Geräte, auf denen verschiedene Versionen des Betriebssystems ausgeführt werden. Ich verwende auch verschiedene Versionen von Python und tcl / tk.

Entschuldigung, wenn dies eine dumme Frage ist, aber wie installiere ich diese Versionen (4.30.0.13 oder 4.30.026)? Normalerweise verwende ich pip install, aber wenn ich etwas anderes gemacht habe, brauche ich ein bisschen Anleitung, um Ihnen zu helfen.

4.31.0 wurde heute früher bei PyPI veröffentlicht. Sie können es wie andere Versionen installieren.

Wenn Sie die Codezeile im vorherigen Beitrag hinzufügen, wird der Patch aktiviert.

 sg.set_options(enable_mac_notitlebar_patch=True)

Sie können GitHub-Versionen über die Benutzeroberfläche von sg.main () installieren, indem Sie auf die rote Schaltfläche "Upgade" klicken. 4.31.0 ist die aktuelle Version auf GitHub und die Version, die für PyPI veröffentlicht wurde.

Ich habe einige verschiedene Tests mit verschiedenen Versionen von tcl / tk (8.5.9, 8.6.8, 8.6.10) durchgeführt und festgestellt, dass der ursprüngliche Code
image
wird die Titelleiste deaktiviert erscheinen lassen, aber ich kann auf die Schaltfläche Minimieren oder x klicken. Wenn ich es minimiere und dann wieder aufrufe, ist die Titelleiste vollständig deaktiviert. Dies geschieht sowohl in 8.5.9 als auch in 8.6.8. Für 8.6.10 funktioniert alles gut. (wie in früheren Kommentaren erwähnt)

Als nächstes habe ich versucht, es mit Ihrem Patch auszuführen.
image
Am Ende war die Titelleiste aktiv und sowohl die Minimierungs- als auch die X-Schaltfläche funktionierten. Wenn ich sie minimierte und das Fenster wieder öffnete, wurde sie deaktiviert, ähnlich wie oben erwähnt.

Daher treten die Probleme immer noch mit Versionen 8.6.8 und niedriger auf.

Hier war der ursprüngliche Code, der tkinter verwendete, um ein ziehbares Fenster ohne Titelleiste zu erhalten.
image
Ich habe diesen Code gefunden, als ich mich umgesehen habe, um dieses Problem beim Ausblenden der Titelleiste zu lösen. Dies verwendet tcl / tk 8.6.8 oder niedriger
https://stackoverflow.com/questions/29641616/drag-window-when-using-overrideredirect

Versionen
MacOS: 10.15.7
PySimpleGUI: 4.31.0 spätestens
Python: 3.8.1, 3.8.6, 3.9.0

Für tcl / tk 8.6.8 oder niedriger
Weder Patch noch Originalbeispiel funktionieren

Haben Sie auf der Konsole eine Meldung gesehen, dass der Patch angewendet wurde?

Das Seltsame an den Tests ist, dass die Technik, mit der ich die No-Titlebar erreiche, eine ist, die zuvor hier veröffentlicht wurde. Grundsätzlich wird die Überschreibung wiederholt, jedoch mit einem falschen Wert. Es ist auch seltsam, dass es ein Sperrverhalten gibt, das neu zu sein scheint.

Können Sie sicherstellen, dass diese Meldung angezeigt wird:

'* Applying Mac no_titlebar patch *

Wenn diese Meldung nicht angezeigt wird, wurde der Patch nicht angewendet.

Es wäre hilfreich, wenn Sie die Version von PySimpleGUI zusätzlich zum Drucken der Version von tkinter drucken würden, um sicherzugehen, dass wir mit der Kombination von Variablen arbeiten, von denen wir glauben, dass wir sie sind.

Ich vermute immer mehr, dass das MacOS auch hier eine Rolle spielt. Ich habe erst Anfang dieses Jahres von diesem Problem ohne Titelleiste und dem Problem mit Tooltips gehört. Diese Funktionen waren einige der ersten, die in PySimpleGUI veröffentlicht wurden, und dennoch gab es bis vor nicht allzu langer Zeit keinen Bericht über Probleme mit diesen Funktionen.

Der Drag-Anywhere-Teil davon wurde bisher noch nicht besprochen und besteht aus neuen Daten. Können wir uns darauf konzentrieren, nur den No-Titlebar-Code testen zu lassen und zu funktionieren?

Das "Update" dafür kann sehr wohl sein, dass Mac-Benutzer tkinter 8.6.10 ausführen müssen. Ich verbringe zu viel Zeit und Energie mit einem Problem, das eindeutig ein Fehler in der Mac-Software ist. Wenn Sie den Code nicht testen können, ist dies eine nahezu unmögliche Aufgabe.

Ich war schon einmal hier mit dem tk-Button-Bug, der seit über 6 Jahren ein bekanntes Problem war und dennoch nicht behoben wurde. Die Lösung dafür bestand darin, PySimpleGUI Unterstützung für ttk-Schaltflächen hinzuzufügen. Es war viel Arbeit, aber letztendlich konnten Mac-Benutzer PySimpleGUI verwenden. Im Gegensatz zu diesem Fehler scheint dieser die Aufmerksamkeit der tkinter / Mac-Entwickler auf sich gezogen zu haben und wurde in 8.6.10 behoben. Das bedeutet, dass Mac-Benutzer einen Pfad finden können, den sie selbstständig erreichen können, ohne dass diese Art von Hacks und Problemumgehungen zum Code hinzugefügt werden.

Ich mag meine Mac-Benutzer, aber es ist schwer zu rechtfertigen, zu viel in die Unterstützung dieser Plattform zu investieren, wenn die Anzahl der Benutzer gering ist. Ich glaube nicht, dass Installationen jemals 10% für den Mac gebrochen haben.

image

Ja, es scheint ein großer Ärger für eine kleine Gruppe von Benutzern zu sein. Ich habe gerade macOS v11 heruntergeladen (neu in dieser Woche), und es scheint ein anderes Verhalten zu geben. Zum Beispiel sind die Schaltflächen "Minimieren" und "X" jetzt im Gegensatz zu meinem vorherigen Beitrag vollständig deaktiviert.

Eine Sache, die mir auch bei tkinter unter macOS v11 aufgefallen ist, ist, dass ich für tk / tcl v8.5.9 nur root.overrideredirect(True) für keine Titelleiste sagen muss, aber wenn ich versuche, dasselbe unter tk / tcl v8.6.8 zu tun es funktioniert nicht Ich muss es noch tun

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

um es zum Laufen zu bringen.

Zu Ihrer Information, ich erhielt die Protokollmeldung, dass der Patch angewendet wurde. Auch die von mir verwendete Version von PySimpleGUI war 4.31.0, veröffentlicht am 13.11.2020.

Es macht mir nichts aus, eine kleine Gruppe von Benutzern mit Code zu unterstützen, der für die Mac-Plattform spezifisch ist. Das Problem ist, dass es ein sich bewegendes Ziel war. Ich habe in letzter Zeit keinen stabilen Stand gefunden. Die Dinge schienen großartig zu laufen, nachdem Mac-Benutzer auf die Installation von Python.org anstelle von Homebrew umgestiegen waren. Das hat alle von Veröffentlichungen abgehalten, die Probleme mit Knöpfen und Tabellen hatten. Aber dann scheint sich etwas geändert zu haben. Ich denke, dass etwas wahrscheinlich das Mac OS war.

Wie ich bereits erwähnt habe, spielen 3 Variablen eine Rolle. Es gibt die tkinter-Version, die PySimpleGUI-Version und die MacOC-Version. Ich werfe die Python-Version aus dieser Liste heraus, denn während tkinter mit Python gepackt ist und von einer Python-Version zur anderen unterschiedlich sein kann, spielt die Python-Version keine Rolle, solange wir die tkinter-Version verfolgen. Ich habe keinen Einfluss auf das Ergebnis, da die Kombinationen für diese 3 Variablen außer einem Bericht gelegentlich gelten, dass "es nicht funktioniert".

Mit 8.5.9 etwas zu tun, geht viel zu weit zurück. PySimpleGUI unterstützt Python 3.4 und höher, das 6 Jahre zurückliegt. Das war eine Herausforderung, aber eine, die vernünftig ist, da der Raspberry Pi oft mit dieser Version von Python geliefert wird. Es gibt wenig, was ich tun kann, um dies zu umgehen, außer Pi-Benutzer zu zwingen, ihre Python-Version zu aktualisieren, und ich würde das lieber nicht zulassen, da dies keine triviale Sache ist.

8.5.9 wurde vor über 10 Jahren veröffentlicht. Einige Zusammenhänge ... im selben Jahr wurde 8.5.9 veröffentlicht, ebenso 2.7.0. Python 3 war bei 3.1. Es geht viel zu weit zurück, um einen wirklichen Wert zu haben. Ich verstehe den Kontext, für den Sie es verwenden, um zu demonstrieren, dass zu einer Zeit keine Titelleiste funktioniert hat, aber ein Jahrzehnt zurück zu gehen, um eine funktionierende Version von irgendetwas zu finden, ist ziemlich extrem. Es ist ein Leben in Software.

Noch ärgerlicher ist es zu hören, dass MacOS v11 einen Einfluss auf die Funktionsweise von tkinter hat. Das Betriebssystem selbst sollte keinen Einfluss darauf haben, wie tkinter und Python funktionieren.

Es ist enttäuschend zu hören, dass der Patch keine positiven Auswirkungen hatte, da das wm_overrideredirect auf False zurückgesetzt wurde, wodurch das Problem behoben werden soll. Hier ist der Code, der für die No-Titlebar auf einem Mac ausgeführt wird:

                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)

Die Meldung "Application Mac no_titlebar patch" wird unmittelbar vor dem Zurücksetzen von wm_overrideredirect auf False angezeigt.

Ich würde gerne eine Version von PySimpleGUI veröffentlichen, die mit allen Mac OS-Versionen auf allen Versionen von tkinter funktioniert, aber das habe ich seit dem ersten Start von PySimpleGUI versucht, und es scheint, als ob die neuesten Bemühungen konsequent waren zu kurz gekommen.

Das einzige bekannte Problem, das mir derzeit bekannt ist, besteht darin, dass Mac-Benutzer 8.6.10 installieren müssen. Das scheint zu Ergebnissen zu führen, die funktionieren. Das PySimpleGUI "Fix" wird zu einer Fehlermeldung, die gedruckt wird, wenn jemand versucht, ein Fenster ohne Titelleiste zu erstellen oder QuickInfos festzulegen. Unter dem Gesichtspunkt der Benutzerfreundlichkeit ist dies eine schreckliche Lösung, aber ich sehe keinen anderen Ausweg. Es ist besser, wenn Benutzer eine zehn Jahre alte Version von tkinter installieren müssen.

Ich bin besorgt über die Verwendung von Homebrew-Installationen von Python und tkinter. Erst letztes Jahr haben wir herausgefunden, dass Homebrew die Ursache der Probleme ist und dass die Installation von Python.org diese Probleme behoben hat.

Wenn Sie versuchen möchten, wm_overrideredirect zusätzliche Aufrufe hinzuzufügen oder eine andere Operation für das Objekt tkinter root auszuführen, können Sie direkt mit der Mitgliedsvariablen Window window.TKroot zugreifen

Ich glaube nicht, dass sie verwandt sind, aber vielleicht möchten Sie versuchen, die Einstellung modal für das Fenster als Test zu deaktivieren.

Ich möchte nur etwas über tk / tcl 8.5.9 klären ... der einzige Grund, warum ich diese Version verwendet habe, ist, dass sie mit der Homebrew Python 3.9.1-Installation gepackt wurde. Ich habe nur das benutzt, was sie mir gegeben haben. Wie Sie sagten, könnte es sich um ein Homebrew-Problem handeln.

Ich werde ein bisschen herumspielen, indem ich einige der python.org-Versionen herunterlade. Ich habe kein Problem damit, Ihnen dabei zu helfen, dies herauszufinden. Vielleicht könnte ich einige Tests durchführen, die für die verschiedenen Variablen im Spiel etwas kontrollierter sind. Ich brauche möglicherweise etwas Zeit, um dies zu tun, aber wenn Sie bestimmte Dinge haben, die ich anders als die zuvor erwähnten ausprobieren soll, lassen Sie es mich wissen.

Eine andere Sache, die ich erwähnen wollte, ist, wenn ich tkinter benutze und den Anruf root.overrideredirect(True) tätige, wird nicht einmal ein Fenster angezeigt. Wenn Sie mich fragen, ist hier etwas mehr los, da bei Verwendung von PySimpleGUI das Fenster angezeigt wird, obwohl die Titelleiste nicht entfernt, sondern nur deaktiviert wird. (für Versionen <8.6.10)

Ich habe kein Problem damit, Ihnen dabei zu helfen, dies herauszufinden.

Nun ... ich werde diese Gelegenheit nutzen. Ich möchte dieses Problem lösen, damit Mac-Benutzer nicht gezwungen sind, 8.6.10 zu installieren. Es ist keine leichte Sache, wie die obigen Kommentare gezeigt haben.

tk / tcl 8.5.9 ... der einzige Grund, warum ich diese Version verwendet habe, ist, dass sie mit der Homebrew Python 3.9.1-Installation gepackt wurde.

WOW .... springe einfach WOW ....

Was für ein grafisches Beispiel dafür, warum die Verwendung von Homebrew für Python keine gute Idee ist. Einerseits konnte ich jemanden sehen, der das sagte, weil "es funktioniert", dann ist es in Ordnung zu benutzen, aber es ist nicht so einfach. Die Menge an tkinter-Code, die seit 8.5.9 hinzugefügt wurde, muss signifikant sein, da tkinter seit einem Jahrzehnt nicht mehr stehen geblieben ist.

Ich finde das eine erstaunliche Neuigkeit. :-( Was für ein harter Kampf.

Bitte versuchen Sie die Installation von Python.org. Vor einiger Zeit habe ich der Dokumentation die Notwendigkeit hinzugefügt, von Python.org zu installieren:

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

Es ist so seltsam, dass diese Probleme aus dem Nichts gekommen zu sein scheinen. Obwohl die Anzahl der Mac-Benutzer gering ist, existieren sie und sie verwenden PySimpleGUI auf tkinter. Ich bin sicher, wenn diese Funktion vor 2 Jahren kaputt gegangen wäre, hätte jemand etwas gesagt. Sie haben sich mit Sicherheit über die Farbprobleme der Tasten beschwert.

Es wäre schön, wenn die Tests sorgfältig organisiert und nachverfolgt würden. Eine Matrix von Kombinationen wäre sehr hilfreich.

_Ich würde gerne sehen, ob es eine Möglichkeit gibt, ältere Versionen von allem auszuprobieren und dann vorwärts zu gehen, bis etwas kaputt geht._

Das wäre mein idealer Plan.

Nur meine 2 Cent. Ich bin kein Mac-Benutzer, aber ich musste etwas in Python für MacOS entwickeln, daher habe ich hier nur begrenzte Erfahrung.

Als ich vor ein paar Monaten meine Optionen ausprobierte, versuchte ich es mit Python-Versionen, die direkt von python.org heruntergeladen wurden. Zu dieser Zeit verbringe ich viel Zeit mit python.org Version 3.6.8, die im Lieferumfang von Tcl / Tk 8.6.8 enthalten ist. Und es hat definitiv Fehler, wenn man die verschiedenen Elemente von PySimpleGUI ausprobiert. Ich denke, es ist nur tkinter, es ist nicht so poliert für macOS. Standardmäßig wird Pythons Homebrew-Version NICHT mit Tcl / Tk geliefert (siehe hier und hier ), aber natürlich gibt es wahrscheinlich viele inoffizielle "Biere". Die Pyenv-Version wird nicht mit Tcl / Tk geliefert. Ich habe den oben beschriebenen Trick verwendet, um Tcl / Tk 8.6.10 auszuprobieren. Wie gesagt, es ist immer noch nicht perfekt, aber in meinen Tests war es definitiv die bessere Option. Ich musste ein Produkt herstellen, ich testete, was funktionierte und was nicht, und verwendete die Dinge, die für mein Projekt funktionierten.

Übrigens funktionieren modale Fenster nicht mit python.org Version 3.6.8, die im Lieferumfang von Tcl / Tk 8.6.8 enthalten ist, und sie verursachen auch Probleme mit pyenv python und Tcl / Tk 8.6.10. Siehe hier .

edit: und macOS wird mit Tcl / Tk 8.5.9 als Teil des Betriebssystems geliefert. Aus diesem Grund erhalten Sie diese Version, wenn Ihr Python nicht mit einer neueren Version Tcl / Tk geliefert wird. Wenn Sie also eine reguläre Brew-Installation von Python verwenden, verwendet diese Python die Tcl / Tk-Version, die mit dem Betriebssystem geliefert wird. Aus diesem Grund erhalten Sie Tcl / Tk 8.5.9, wenn Sie eine normale Homebrew-Python verwenden. Und deshalb muss mein Trick pyenvs Python explizit anweisen, die neuere Brew-Installation von tcl-tk zu verwenden

Oh ... ich habe diese modale Sache vergessen.

Die Popup-Tests, die wir ausgeführt haben, können mit deaktiviertem Modal getestet werden.

@tkozzer .... kannst du bitte diesen Popup Test versuchen?

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

Probieren Sie auch dieses Popup aus, um sicherzugehen, dass drag_anywhere keine Probleme verursacht.

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

Um die maximale Kontrolle und Sichtbarkeit darüber zu erhalten, welche Optionen eingestellt werden, ist der Wechsel zum Erstellen eines Fensters wahrscheinlich eine bessere Möglichkeit zum Testen. Hier ist ein Programm, mit dem wir an diesem Problem arbeiten können:

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()

Ich stelle heute eine Veröffentlichung zusammen, da es einige Änderungen gibt, die erforderlich sind, um PyPI schnell zu erreichen. Wenn modale Fenster für den Mac für alle Versionen von tkinter auf der ganzen Linie kaputt sind, werde ich sie in dieser Version deaktivieren. Kann jemand überprüfen, ob modale Fenster für 8.6.10 und andere Versionen nicht richtig funktionieren? Ich bin mir immer noch nicht sicher, welche Kombinationen von tkinter und MacOS diese unterschiedlichen Probleme verursachen.

Ich kann bestätigen, dass modale Fenster für python.org Python 3.6.8, das mit Tcl / Tk 8.6.8 geliefert wird, nicht funktionieren. Und sie funktionieren nicht für Pyenvs Python 3.6.11, das mit Homebrews Tcl / Tk 8.6.10 arbeitet. Dies sind die einzigen Versionen, die ich mit diesem speziellen Problem ausprobiert habe.

pyenv liefert keine eigenen Pakete / Bibliotheken. Es hilft bei der Konfiguration. Sie müssen noch auswählen, was installiert werden soll und zwischen was Sie wechseln möchten.

Für den Mac ist die Python-Version weniger wichtig als der tkinter, und ich denke, die MacOS-Version. tkinter 8.6.8 sollte auf 3.6, 3.7, 3.8, 3.9 genau gleich laufen. Was variieren kann, ist, welche Version von tkinter installiert wird, wenn Sie 3.6, 3.7 usw. installieren, zumindest unter Windows. Ein Grund, Python von Python.org zu erhalten, ist, dass Sie eine bestimmte Version von tkinter erhalten, die mit der Installation gepackt wurde.

Die Python-Version ist weniger wichtig als der tkinter und ich denke die MacOS-Version

macOS High Sierra Version 10.13.6 für alle meine Tests.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen