Buttonschwund

Fragen zu Tkinter.
Antworten
Tkinter-Einsteiger

Wie ist es möglich, dass, ohne Fehlermeldung, Buttons, Labels und/oder Entrys bei Bewegen der Maus oder beim Ausführen einer Funktion, verschwinden und erst wieder auftauchen, wenn man auf diese klickt?
Es ist auch nicht immer so, aber doch recht häufig.
Wie kann man diesen 'Fehler' beheben?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Tkinter-Einsteiger,

Welches OS, welche Tk-, Tkinter-, Python-Version?
Nett wäre auch ein Beispiel, wo das passiert, eventuell ist ein Fehler bei deinem GUI-Design.

Behebung des Fehlers, aktuellere Versionen von Tk, Tkinter, Python.


Gruß

Dookie
Tkinter-Einsteiger

Tkinter: Revision: 1.160
Python 2.2, da ich mit 2.3 ständig Probleme hatte.
Und das zu Python 2.2 gehörende os, weiß nicht welche Version.

Bei 2.3 taucht aber daselbe Problem auf.

Wenn ich bei der Bildschirmgröße eine Variable verwende, verschwindet einfach ein Entry und ein Button, was bei der Eingabe einer Zahl nicht passiert.

Ein konkretes Beispiel kann ich leider nicht liefern.
NOTZE
User
Beiträge: 106
Registriert: Mittwoch 21. Januar 2004, 20:28

Tkinter-Einsteiger hat geschrieben: Und das zu Python 2.2 gehörende os, weiß nicht welche Version.
Hi,

welches OS gehört den zu Python 2.2???
Bringt Python jetzt auch Betriebssysteme raus??
Hab ich was verpasst??

mfg NOTZE
Tkinter-Einsteiger

Äh, ich dachte jetzt an die Version des os-Moduls!

Na dann Win98.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Wenn ich bei der Bildschirmgröße eine Variable verwende, verschwindet einfach ein Entry und ein Button, was bei der Eingabe einer Zahl nicht passiert.
Aha, tja da tippe ich mal darauf, daß du eine lokale Variable in einer Methode oder Funktion verwendest. Diese ist nach dem Ausstieg aus der Funktion nicht mehr belegt, bzw kann unter Umständen einen undefinierten Zustand enthalten.


Gruß

Dookie
Tkinter-Einsteiger

Ah, sowas ähnliches dachte ich mir schon.
Lässt sich dieses Problem einfach lösen, oder muss ich noch einmal einiges umschreiben?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Lässt sich dieses Problem einfach lösen, oder muss ich noch einmal einiges umschreiben?
jain, ohne den Code zu kennen kann dir da keiner was genaues sagen. Aber bei so einem Problem würde ich ein Redesign vorziehen als den alten Code solange zu ändern bis es vielleicht klappt.
Du könntest zwar die betroffenen Variablen global machen, aber davon rate ich dringend ab!


Gruß

Dookie
Tkinter-Einsteiger

Warum rätst du von globalen Variablen ab?
Ich habe bisher immer damit gearbeitet, weil ich mir bisher nicht anders zu helfen wusste. Was wäre eine Alternative?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

bei globalen Variablen kommt es sehr leicht zu Seiteneffekten. Stell Dir eine Funktion vor, die eine Globale Variable verwendet. Nun hast Du eine 2. Funktion die ebenfalls diese Variable nutzt. Irgendwann erweiterst Du die 2. Funktion und benutzt in ihr die erste Funktion ohne daran zu denken, daß diese auch die Variable ändert. Schon hast Du einen schwer zu findenden Fehler in Deiner Anwendung.

Eine Alternative können Klassen sein. In den Attributen einer Klasseninstanz kannst Du variable Werte speichern, die genau solange existieren wie die Instanz der Klasse. Du kannst auch Klassenvariablen verwenden, die dann für alle Instanzen gelten.

Erstell dir eine Klasse GUI und leg in der die Fenster, Buttons und sonstigen Widgets und die dazugehörigen Variablen ab. Solange das GUI-Instanz existiert existieren auch die Widgets und die Variablen.
Du kannst auch die Methoden die bei einem Klick auf einen Button z.b. ausgeführt werden können in der Klasse definieren. Um jetzt eine eigene Anwendung zu machen, erstellst Du einfach eine neue Klasse, die Du von GUI ableitest und überschreibst in dieser die Methoden.


Gruß

Dookie[/code]
Tkinter-Einsteiger

Aber solange das Programm keine Fehler aufweisen kann, sind doch globals noch in Ordnung, oder?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Das Programm, das keine Fehler aufweisen kann zeigst mir erstmal.
Globals verwende ich nur für Konstanten, die ich z.B. aus einem Modul exportiere.
http://python.sandtner.net/viewtopic.php?t=1297 hier hab ich mal ein Beispiel, wo sich ein globales Dictionary zwar anbietet, aber es geht auch ohne.

Dookie
Antworten