Tkinter auf Windows und Linux

Fragen zu Tkinter.
Antworten
FelixCastrop
User
Beiträge: 4
Registriert: Montag 31. März 2014, 11:49

Hallo,

mein erstes Posting hier und in Sachen GUI-Programmierung bin ich leider auch ein ziemlicher Anfänger. Also vorab schon mal sorry, wenn das eine totale Newbie-Frage ist und/oder das Thema im Forum schon an anderer Stelle behandelt wurde (habe ich dann beim Durchsuchen nicht gefunden).

Mein Problem: Folgendes Programm läuft auf Linux, aber nicht auf Windows.
Meine Frage: Warum? (Und wie kriege ich es unter Windows zum Laufen?) :)

Code: Alles auswählen

import Tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createWidgets()

    def createWidgets(self):
        self.quitButton = tk.Button(self, text="Quit",
                                    command=self.quit)
        self.quitButton.grid()

app = Application()
app.master.title("Sample Application")
app.mainloop()
Quelle des Programmes: http://infohost.nmt.edu/tcc/help/pubs/t ... kinter.pdf (2. A minimal Application)

Vielen Dank schon mal vorab für Eure Hilfe! :)

Gruß
Felix
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Was genau heißt denn "läuft nicht"? Als Fehlerbeschreibung ist das etwas knapp. Wie hast du das Programm gestartet, was passiert, was sollte passieren, gibt es eine Fehlermeldung und wie lautet diese?
Das Leben ist wie ein Tennisball.
FelixCastrop
User
Beiträge: 4
Registriert: Montag 31. März 2014, 11:49

Sorry: Unter Windows habe ich das Programm mit Python 2.7.6 (und Tk 8.5.2) gestartet. Es erscheint ein Fenster mit einem einzigen Button: "Quit". Wenn man da draufklickt soll sich das Fenster schließen bzw. das Programm sich beenden. Klappt unter Linux.
Unter Windows leider nicht: da bleibt der Button "eingedrückt" und nichts passiert. Wenn man das Fenster dann manuell mit ALT + F4 schließen will, kommt nach einiger Zeit die Windows-Fehlermeldung "pythonw.exe reagiert nicht".
BlackJack

@FelixCastrop: Das sollte eigentlich nicht passieren.
FelixCastrop
User
Beiträge: 4
Registriert: Montag 31. März 2014, 11:49

Ok, ich habe es nochmal auf einem anderen Rechner (Win XP, Python 2.7, Tk 8.5) versucht. Fehler bleibt derselbe :(

Auf effbot.org/tkinterbook habe ich ein anderes Beispiel gefunden (hier leicht geändert):

Code: Alles auswählen

import Tkinter as tk

class Application:
    def __init__(self, master):
        frame = tk.Frame(master)
        frame.pack()
        self.button = tk.Button(frame, text="QUIT", command=frame.quit)
        self.button.pack()

root = tk.Tk()
app = Application(root)
root.mainloop()
root.destroy() # optional
Als Erklärung für den abschließenden destroy()-Aufruf in Zeile 13 heißt es da:
Note: Some Python development environments have problems running Tkinter examples like this one. The problem is usually that the enviroment uses Tkinter itself, and the mainloop call and the quit calls interact with the environment’s expectations. Other environments may misbehave if you leave out the explicit destroy call. If the example doesn’t behave as expected, check for Tkinter-specific documentation for your development environment.
Wenn ich den destroy()-Aufruf weglasse, bekomme ich denselben Fehler wie bei meinem ersten Programm. Füge ich diesem ersten Programm als letzten Befehl

Code: Alles auswählen

app.destroy()
hinzu, bleibt der Fehler aber erhalten.

Ich werde daraus noch nicht so recht schlau.. :?
BlackJack

@FelixCastrop: Der `destroy()`-Aufruf ist unnötig. Ausser man verwendet eine IDE die gestartete Programme nicht sauber von sich selbst trennt und selbst in Tk geschrieben ist. Effbot hätte da auch das Kind beim Namen nennen und IDLE schreiben können, wobei das mittlerweile funktionieren sollte. Ich halte jedenfalls nicht viel davon Workarounds für kaputte IDEs in Programme einzubauen.

Wie startest Du das Programm denn? Was passiert wenn Du es aus einer Konsole heraus startest?
FelixCastrop
User
Beiträge: 4
Registriert: Montag 31. März 2014, 11:49

Ah, ich danke Dir! :D
IDLE war das Stichwort; wenn ich das Programm aus der Konsole heraus aufrufe, funktioniert es. Dass sich Pythons Standard-IDE mit Pythons Standard-GUI-Toolkit nicht verträgt, darauf wäre ich nicht gekommen..
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ersetze "Standard" durch "mitgeliefert". In den meisten Faellen halte ich weder IDLE noch Tk fuer eine brauchbare Loesung und schon gar nicht fuer einen Standard.

Das Problem bei IDLE ist, dass es Programme je nach Konfiguration nicht in einem eigenen Prozess startet und damit gibt es Probleme bei GUIs und v.a. Tk selbst.
Antworten