3 Stimmen

Ein easygui-Python-Skript mit der Standard-Schaltfläche "Schließen" schließen

Ich habe eine sehr einfache Anwendung, die eine easygui entrybox() präsentiert und diese in einer Endlosschleife weiterführt, wenn sie Benutzereingaben erhält.

Ich kann das Programm mit der Schaltfläche "Abbrechen" beenden, da diese keinen Wert zurückgibt, aber ich möchte auch in der Lage sein, die Standardschaltfläche "Schließen" zu verwenden, um das Programm zu beenden. (z. B. oben rechts in einem Windows-Fenster, oben links in einem Mac-Fenster) Diese Schaltfläche bewirkt derzeit nichts.

Bei einem Blick auf das easygui-Modul fand ich diese Zeile:

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

Dies scheint der Grund dafür zu sein. Ich bin kein TKinter-Experte, aber ich könnte wahrscheinlich herausfinden, wie man diesen Handler ändern, um die Art und Weise zu handeln, die ich will.

Jedoch, wie ich lieber nicht über mit dem easygui-Modul durcheinander, gibt es eine Möglichkeit, dieses Verhalten von meinem Hauptskript zu überschreiben, und haben die Schließen-Schaltfläche entweder das Programm direkt schließen oder keine zurück?

5voto

kylebrooks Punkte 425

Es würde eine Änderung des easygui-Moduls erfordern, ja. Ich werde es ändern lassen!

** Ich habe eine E-Mail an den EasyGUI-Ersteller geschickt, um dies zu erklären [12:12 PM, January 23/09]

** Ich möchte nur sagen, dass die Wahrscheinlichkeit, dass diese Änderung eintritt - wenn überhaupt, was ich bezweifle - sehr gering ist. Sehen Sie, EasyGUI soll eine einfache, diskrete Möglichkeit sein, GUIs zu erstellen. Ich denke, dass dieser Zusatz nicht hilfreich wäre, zumal die Oberfläche sehr sequentiell ist, so dass sie für neue Benutzer verwirrend sein würde. [12:19 PM, Januar 23/09]

** Der EasyGUI-Entwickler antwortete auf meine E-Mail mit folgenden Worten:

Ein easygui-Dialog sollte niemals beendet werden die Anwendung beenden - er sollte einen einen Wert an den Aufrufer zurückgeben und ihn entscheiden lassen Aufrufer entscheiden lassen, was zu tun ist.

Aber das ist eine interessante Idee. Anstatt einfach einen Klick auf das "Schließen"-Symbol zu ignorieren, könnten easygui-Boxen denselben Wert zurückgeben, den ein Klick auf die Schaltfläche "Abbrechen" zurückgeben würde. Ich werde darüber nachdenken.

-- Steve Ferg

Ich denke, dass dies zumindest ein Fortschritt ist. [14:40 Uhr, 23. Januar 2009]

0 Stimmen

Das ist ausgezeichnet. Ich hatte nicht daran gedacht, den Ersteller per E-Mail zu kontaktieren! Ich stimme zu, dass die Schaltfläche "Schließen" das Programm nicht vollständig schließen sollte, aber es wäre schön, wenn sie das Verhalten der Schaltfläche "Abbrechen" widerspiegeln würde.

0voto

Angel Punkte 808

Ich weiß es jetzt nicht, aber haben Sie so etwas schon einmal ausprobiert?

root.protocol('WM_DELETE_WINDOW',  self.quit)

o

root.protocol('WM_DELETE_WINDOW',  self.destroy)

Ich habe es nicht ausprobiert, aber googeln Sie doch mal etwas wie "Tkinter protocol WM_DELETE_WINDOW"

0 Stimmen

Etwas in dieser Richtung würde wahrscheinlich funktionieren, aber müsste dafür nicht das easygui-Modul geändert werden? Dies kann in der Tat der einzige Weg, es zu tun, aber ich bin daran interessiert, zu sehen, wenn es eine andere Möglichkeit, es zu tun.

0voto

pietronardelli Punkte 1

Ich habe eine Lösung gefunden, die Antwort ist unter dem Auswahlfeld, wenn er einige Funktionen definiert (Sie können einfach tippen, um denyWindowManagerClose zu finden) und zu gehen, wo er es definiert. Löschen Sie es einfach und setzen Sie diesen Code an seiner Stelle.

    def denyWindowManagerClose():
#------------------------------------------------------------------
#  Changed by ProgrammingBR
#  Enables the user to close the window without entering a value
#  Youtube URL: https://www.youtube.com/channel/UCTZh6kWz_iYACNE6Jcy2lhw
#------------------------------------------------------------------
    global __enterboxText
    __enterboxText = None
    boxRoot.quit()

Sie können eine Backup-Datei zu erstellen, aber das wird für alle Boxen zu arbeiten, die Vorschläge hier abgesehen von diesem wird nicht funktionieren, habe ich versucht, die sie. wenn Sie sehen wollen, habe ich ein Video auf sie (es ist in Portugiesisch, aber Sie können es folgen) gehen Sie einfach auf den youtube-Kanal, werde ich es bald hochladen und den Link hier posten :)

0 Stimmen

Wenn ihr eine optimierte Datei haben wollt, habe ich eine erstellt und auf gitHub gepostet Hier ist der Link github.com/ProgrammierungBR/easy-gui-WINDOWFIX und dies ist das YT-Video (das Video ist vereinfacht, ich habe es in die von mir erstellte Datei optimiert) youtube.com/watch?v=i67acTgFWIU

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X