Code aus GUI Builder verwenden

Fragen zu Tkinter.
Antworten
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 12. Mai 2009, 08:39

Hallo zusammen,

ich habe ein Verständnisproblem mit dem von GUI BUilder erzeugten Code:

Code: Alles auswählen

def _button_1_command(self, *args):
        print "Hallo"
        pass
Mir ist grudnsätzlich klar das Code den ich in diese Funktion schreibe ausgeführt wird, sobald ich den button drücke.

Nun weiß ich nicht wie ich bei Click auf den Button die Anwendung beenden kann. Kann mir mal hier jemand einen Tipp geben?
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Dienstag 12. Mai 2009, 09:19

Hallo
meinst du sowas hier(sehr einfaches Beispiel)

Code: Alles auswählen

 
#!/usr/bin/env python
# -*- coding: utf8 -*-

import Tkinter as tk

def button_command():
    root.destroy()

root = tk.Tk()
button = tk.Button(root, text="Exit",command=button_command)
button.grid()
root.mainloop()
Gruß...busfahrer
Alles wird gut ;-)
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 12. Mai 2009, 11:10

Ja Danke schonmal, das sit gut soweit, aber funktioniert komsicherweise in meinem Konktreten Beispiel nicht.

Code: Alles auswählen

class CustomHw(Hw):
    pass

    def _button_1_command(self, *args):
        root.destroy()
        
        pass


def main():
    try: userinit()
    except NameError: pass
    root = Tk()
    demo = CustomHw(root)
    root.title('hw')
    try: run()
    except NameError: pass
    root.protocol('WM_DELETE_WINDOW', root.quit)
    root.mainloop()

if __name__ == '__main__': main()
Er erkennt root nicht, obwohl es in main() definiert ist.
BlackJack

Dienstag 12. Mai 2009, 12:11

@bankkind: Nicht obwohl, sondern weil es in `main()` definiert wird. Ein Verwendungszweck von Funktionen ist ja gerade, das man nicht alles global stehen hat und alle Namen überall sichtbar sind. In diesem Fall könnte man zum Beispiel `CustomHw` im Konstruktor das `root`-Objekt mitgeben, damit in der Methode darauf zugegriffen werden kann.

Du solltest Dir übrigens mal die überflüssigen ``pass``-Anweisungen abgewöhnen.

Und das mit dem `run()` und dem `NameError` ist auch sehr merkwürdig.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 12. Mai 2009, 12:32

Grundsätzlich sei einmal gesagt, der Code ist ein specttcl generierter Code aus dem GUI-Builder...

aber:

Code: Alles auswählen

 In diesem Fall könnte man zum Beispiel `CustomHw` im Konstruktor das `root`-Objekt mitgeben, damit in der Methode darauf zugegriffen werden kann.
Wie mache ich das?
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 12. Mai 2009, 13:05

Code: Alles auswählen

class CustomHw(Hw):
    def __init__(self, root):
        #Hw.__init__(self, root)
        self.root = root
    
    def _button_1_command(self, *args):
        self.root.destroy()

def main():
    ...
    root = Tk()
    demo = CustomHw(root)
    ...
Du solltest vielleicht noch einmal einen Blick ins Tutorial werfen.
Das Leben ist wie ein Tennisball.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 12. Mai 2009, 18:12

OK Danke, das funktioniert.

Noch eine Frage: Gibt es in Tkinter auch eine komfortable möglichkeit Tabs(Reiter) zu verwenden, gibt es hierfür eien Komponennte? Oder ist es schon von grund auf empfehlenswert lieber auf ein stärkeres GUI-Toolkit zu wechseln?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 12. Mai 2009, 21:59

bankkind hat geschrieben:Noch eine Frage: Gibt es in Tkinter auch eine komfortable möglichkeit Tabs(Reiter) zu verwenden, gibt es hierfür eien Komponennte?
Ab Python 3.1 wird es ein Modul tkinter.ttk geben, das ein Notebook-Widget zur Verfügung stellt. Soweit ich weiß, gibt es auch jetzt schon externe Lösungen und ich meine es wäre auch im Forum schonmal behandelt worden - kannst ja mal nach suchen.
bankkind hat geschrieben:Oder ist es schon von grund auf empfehlenswert lieber auf ein stärkeres GUI-Toolkit zu wechseln?
Das hängt davon ab, was du vorhast und wen du fragst ... :)
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Dienstag 12. Mai 2009, 23:10

Hallo bankkind

Würde dir dieses genügen?:

Bild

Gruss wuf :wink:
Take it easy Mates!
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 13. Mai 2009, 11:12

wuf hat geschrieben:Hallo bankkind

Würde dir dieses genügen?:

Bild

Gruss wuf :wink:
Perfekt!

@numerix: Im Grunde genommen wird das Tool wa sich bauen möchte nicht viel größer als das in dem Screenshot von wuf.
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Mittwoch 13. Mai 2009, 11:46

Hallo bankkind

Wenn du es verwenden möchtest musst du aber Pmw installieren.
Hier kannst du mehr erfahren:
http://pmw.sourceforge.net/

Gruss wuf :wink:
Take it easy Mates!
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 13. Mai 2009, 12:17

was mir nicht so gefällt ist die tatsache das Tkinter diese Funktion nicht mitbringt...

Gibt es eigentlich ein deutsches GUTES tkinter Tutorial?
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Mittwoch 13. Mai 2009, 13:13

Kennst du schon welche in deutsch geschriebene Bücher?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 13. Mai 2009, 13:34

bankkind hat geschrieben:was mir nicht so gefällt ist die tatsache das Tkinter diese Funktion nicht mitbringt...
Dannn warte halt auf Python 3.1 oder - falls du es so eilig hast - probier es mal mit der aktuellen 3.1 Beta 1.
bankkind hat geschrieben:Gibt es eigentlich ein deutsches GUTES tkinter Tutorial?
Falls du irgendetwas kostenloses aus dem Web meinst: Ich kenne keins. Es gibt hier und da was auf deutsch, vielleicht wäre es sogar lohnend, das mal irgendwie zusammenzustellen, aber etwas richtig Gutes habe ich bisher nicht aufgestöbert.

Falls es auch was kosten kann: Im Buch "Objektorientierte Programmierung mit Python" von Michael Weigend gibt es rund 100 Seiten über Tkinter. Reicht zumindest für einen Einstieg.

Edit: Hier zwei deutsche Einführungen in Tkinter:
http://www.wspiegel.de/tkinter/tkinter_index.htm
http://home.foni.net/~heikos/tkinter/index.html
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 13. Mai 2009, 14:39

Das Buch scheint wirklich gut zu sein, könnte ich mir ja mal bestellen.
Antworten