tkMessageBox.showinfo() -> crash?!?

Fragen zu Tkinter.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Komisch, ein kleines Test skript bricht ab mit Fatal Python error: PyEval_RestoreThread: NULL tstate nachdem man die tkMessageBox.showinfo() abnickt:

Code: Alles auswählen


import Tkinter
import tkMessageBox


class BaseTkGui(object):
    def __init__(self):
        self.root = Tkinter.Tk()
        self.root.title(__file__)
        self.root.bind("<Destroy>", self.destroy)

        menubar = Tkinter.Menu(self.root)

        filemenu = Tkinter.Menu(menubar, tearoff=0)
        filemenu.add_command(label="Load", command=self.command_load_file)
        filemenu.add_command(label="Save", command=self.command_save_file)
        filemenu.add_command(label="Exit", command=self.destroy)
        menubar.add_cascade(label="File", menu=filemenu)

        self.root.config(menu=menubar)
        self.root.update()

    def destroy(self, event=None):
        self.root.quit()

    def command_load_file(self):
        print "command_load_file()"
        #~ tkMessageBox.showinfo("info", "command_load_file()", parent=self.root)

    def command_save_file(self):
        tkMessageBox.showinfo("info", "command_save_file()", parent=self.root)

    def mainloop(self):
        self.root.mainloop()


if __name__ == "__main__":
    tk_win = BaseTkGui()
    tk_win.mainloop()
Einfach starten und im Menü auf "File / Save" gehen und auf "OK" Klicken. Wobei "File / Load" normal funktioniert. hat also was mit tkMessageBox.showinfo() zu tun...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@jens: Kann ich nicht nachvollziehen. Allerdings schliesst sich wegen dem `bind()` von <Destroy> die gesamte Anwendung wenn das Info-Fenster zerstört wird. Was sollte diese Zeile denn bewirken?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah, das ist es! Zeile 10 löschen und gut.

Schöne Fehler erhält man nicht, mit Tk :(



Also die eigentliche Frage, die ich mit diesem Test Skript stellen wollte:

Wie kann ich mit einer Seperaten Klasse, das bestehende Menü am besten erweitern?

Möchte halt Basis-Funktionalität in einer Klasse haben und diese dann erweitern.

Gibt es da ein allgemeine Anleitung?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten