Neues Fenster mit Ausgabe

Fragen zu Tkinter.
Antworten
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Hallo mal wieder,

seit meinem letzten Problem ist ein neues aufgetaucht. Ich würde gerne wissen, wie ich eine vorher festgelegte Variable in einem neuen Fenster ausgebe. Etwa so wie bei einem Print befehl

Code: Alles auswählen

n=24
print 'Sie haben',n,'eingegeben'
nur das halt das 'n' in ein neues Fenster gegeben wird. meine Versuche mit:

Code: Alles auswählen

m=tk.Entry(fenster2)
    m.pack()
fenster2.label=tk.Label('Sie haben den Wert',m,eingegeben)
Wie geht das?

Bitte um Hilfe
nightm4r3 :roll:
BlackJack

Die Funktion `showinfo()` im Modul `tkMessageBox` könnte hilfreich sein.
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

bei meinen projekten verwende ich auch das modul tkMessageBox.
sieht bei mir dann meist so aus.

Code: Alles auswählen

tkMessageBox.showinfo(';o)','Sie haben ' + n + ' eingegeben')
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Ich habe es jetzt so gemacht.

Code: Alles auswählen

def ggt1():
    lambda: ggt(int(m.get()), int(n.get()))
    message=tk.MessageBox.showinfo('Der ggT ist:' + n + '')
allerdings bekomme ich jetzt die Fehlermeldung

Code: Alles auswählen

Exception in Tkinter callback
Wodrann liegt das?

btw:

Code: Alles auswählen

ggt(int(m.get()), int(n.get()))
Die beiden Werte n und m wurden über 2 Entry Felder eingegeben.

Edit:Der Fehler oben kommt nicht mehr, aber das Programm hängt sich auf und läuft nicht weiter.

Bitte um Hilfe
BlackJack

Die Zeile mit dem ``lambda`` hat keinen Effekt, kann also komplett weg. Du definierst da eine anonyme Funktion und machst nichts damit.

Und der Fehler dürfte sein, dass Du versuchst eine Zeichenkette und ein `Entry`-Widget zu "addieren", jedenfalls wenn der Name `n` wirklich an dieser Stelle zu dem Zeitpunkt an ein `Entry` gebunden ist, wie es das ``n.get()`` in der Lambda-Funktion vermuten lässt.

Wieder mal ein gutes Beispiel dafür warum man nicht mit globalen Namen arbeiten sollte. Es ist total undurchsichtig wo `m` und `n` eigentlich herkommen.

Ausserdem müsste noch mehr Information zu der Ausnahme verfügbar sein. Zum Beispiel *was* für eine Ausnahme es ist und in welcher Zeile sie ausgelöst wird. Wenn Deine IDE das nicht anzeigt, starte das Programm mal von der Konsole.
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Ich stell einfach mal das Komplette Programm rein weil ich den fehler nicht finde. es funktioniert alles bis auf die Ausgabe im anderen Fenster.

Code: Alles auswählen

def ggt1():
    lambda: ggt(int(m.get()), int(n.get()))
    message=tk.tkMessageBox.showinfo('Der ggT ist:' + n + '')
    message.pack()

def aufgabe1():
#Nebenfenster
    fenster2=tk.Toplevel()
    fenster2.geometry('400x300')
#Label im Nebenfenster
    fenster2.label=tk.Label(fenster2,text='ggT berechnen', font=('Verdana',16,'bold'))
    fenster2.label.pack()
#2.Label im Nebenfenster
    fenster2.label2=tk.Label(fenster2,text='Bitte geben Sie die erste Zahl ein')
    fenster2.label2.pack()
#Entry Feld 1
    m=tk.Entry(fenster2)
    m.pack()
#3.Label im Nebenfenster
    fenster2.label3=tk.Label(fenster2,text='Bitte geben Sie die zweite Zahl ein')
    fenster2.label3.pack()
#Entry Feld 2
    n=tk.Entry(fenster2)
    n.pack()
#Button erstellen
    fenster2.button=tk.Button(fenster2,text='Bestätigen',
                           command=ggt1)
    fenster2.button.pack()
    
#Fenster anzeigen
    fenster2.mainloop()




from funktionen import *   #Die Datei beinhaltet eine Funktion für den ggT und wird auch geladen
import Tkinter as tk
fenster=tk.Tk(className='Hausaufaben')
fenster.geometry('400x300')
fenster.label=tk.Label(fenster,text='Bitte treffen Sie Ihre Auswahl', font=('Verdana',16,'bold'))
fenster.label.pack()
fenster.button=tk.Button(fenster,text='ggT berechnen',
                      command=aufgabe1)
fenster.button.pack()
fenster.mainloop()
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

http://rapidshare.com/files/91412453/python25.jpg.html

Das ist die Fehlermeldung. Sorry musste se bei rapidshare hochladen
BlackJack

Man kann auch bei Windows-Konsolen den Text kopieren. Das ist vielleicht einfacher als Screenshots vom ganzen Desktop zu machen und irgendwo hoch zu laden. ;-)

`tkMessageBox` ist ein *Modul* und kein Attribut des `Tkinter`-Moduls.

Und das nächste Problem dürfte dann werden, wo in der Funktion `ggt1` das `n` her kommt. Das wird nicht definiert. Und die `lambda`-Funktion wird nicht verwendet. Könnte sie auch gar nicht, weil weder `m` noch `n` in der `ggt1`-Funktion definiert sind.

Ich würde die `ggt1` lokal in der `aufgabe1` definieren. Dann kommt man problemlos an die Eingabe-Widgets heran.

Code: Alles auswählen

    def do_ggt():
        tkMessageBox.showinfo('Der ggT ist: ' + ggt(int(m.get()), int(n.get())))
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Okay vielen Dank ich werde es versuchen.


mfg nightm4r3^
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

jetzt kommt der Fehler

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
  File "E:\Python25\hauptprogramm.pyw", line 29, in aufgabe1
    command=tkMessageBox.showinfo('Der ggT ist: ' + ggt(int(m.get()), int(n.get()))))
NameError: global name 'tkMessageBox' is not defined
Sorry wenn ich euch de letzten nerv koste
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

nightm4r3^ hat geschrieben:Sorry wenn ich euch de letzten nerv koste
Wenn du Google vor dem Posten ausprobiert hättest, würdest du wissen warum. Die Lösung ist im ersten Treffer zu finden. Etwas Eigeninitiative darf man verlangen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Und was hätte ich bitteschön bei Google suchen sollen?
Wofür sind denn Foren da???
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

nightm4r3^ hat geschrieben:Und was hätte ich bitteschön bei Google suchen sollen?
Wie wärs mit was offensichtlichen wie ``tkMessageBox``?
nightm4r3^ hat geschrieben:Wofür sind denn Foren da???
Um dir bei berechtigten Fragen zu helfen. Fragen bei denen eine Google-Suche innerhalb einer Minute zu einer verhilft sind quatsch. Foren sind nicht da um Leuten Zeug vorzukauen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vingdoloras
User
Beiträge: 53
Registriert: Sonntag 2. Dezember 2007, 18:25

Google ist dazu da, um kluge Hilfen im Internet zu finden, zum Beispiel in Foren, wo die Frage möglicherweise schonmal beantwortet wurde... nur ist es eine Kunst für sich, Google richtig zu benutzen.
Man kann froh sein, dass man hier noch Suchworthilfen für Google bekommt, ich habe in anderen Foren schon Beiträge gesehen, die sagen "da findest du die Lösung" und hintendran den Link
www.gidf.de

schau ihn dir an, merke ihn dir und sei nicht böse, wenn jemand so etwas schreibt... ich habe selbst manchmal Probleme, mit Google das erwünschte Ergebnis zu erzielen, aber was nich is kann noch werden :wink:
Aber Foren sind wirklich nicht dazu da, jede Frage immer wieder auseinanderzuziehen...
du solltest etwas mehr Fantasie in die Verteilung der Variablennamen stecken
Antworten