Seite 1 von 1

python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 09:00
von marconisahib
Guten Tag, nach langer Zeit beschäftige ich (77J) mich wieder mit der Programmierung eines Log-Programms für den Amateurfunk.
Das Programm läuft in python rund. Jetzt will ich es mit Tkinter grafisch darstellen.
Dabei stosse ich auf zwei Fehler und bitte um Hilfe.
Bei diesem Testabschnitt soll aus zwei Feldern Text gelesen werden:

def show_entry_fields():
print("excall: %s\nOP name: %s" % (e1.get(), e2.get()))
e1.delete(0,END)
e2.delete(0,END)

master = Tk()
Label(master, text="excall").grid(row=0)
Label(master, text="op-name").grid(row=1)

e1 = Entry(master)
e2 = Entry(master)
e1.insert(10,"xxx")
e2.insert(10,"yyy")

Das Fenster ist ok!

Fehler 1 ?? __len__??

# Unterprogramm prüft auf keine Text-Eingabe
Nicht durch (zahl) verwirren lassen

def kein(zahl):
if len(zahl) == 0:
zahl = 'n'
print ("****zahl= " ,zahl)
return (zahl)

Fehlermeldung
if len(zahl) == 0:
AttributeError: Entry instance has no attribute '__len__'

# Unterprogramm prüft auf keine Eingabelänge - jetzt unwirksam gemacht

def kein(zahl):
#if len(zahl) == 0:
# zahl = 'n'
print ("****zahl= " ,zahl)
return (zahl)
# ende unterprogramm

Fehler 2 ??
warum gibt print den richtigen wert aber via (kein)/zahl kommt
<Tkinter.Entry instance at 0xb70aae0c>)

myexcall = kein(e1)
print ("myexcall = ", myexcall)
sparks = kein(e2)
print ("sparks = ",sparks)
#sparks = raw_input("sparks: ") # das war vorher die abfrage in python

AUSGABE auf der Console durch print ok.
excall: dh4pb
OP name: sylvester
('****zahl= ', <Tkinter.Entry instance at 0xb70aae0c>)
('myexcall = ', <Tkinter.Entry instance at 0xb70aae0c>)
('****zahl= ', <Tkinter.Entry instance at 0xb70b0dec>)
('sparks = ', <Tkinter.Entry instance at 0xb70b0dec>)



print(myexcall +" ", sparks+" ", qzeit+" ", datum+" ", qssm+" ", call+" ", qra)
TypeError: unsupported operand type(s) for +: 'instance' and 'str'


QRX?

Re: python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 09:33
von Sirius3
@marconisahib: das nächste mal bitte Code in Code-Tags einfassen (z.B. über den <Python>-Knopf über dem Editfeld im vollständigen Editor), dann kann man den Quelltext auch lesen.

e1 und e2 sind TKinter-Entry-Instanzen. Das ist etwas anderes als ein String. Wie man an den String kommt, hast Du ja schon in show_entry_fields gezeigt.

Re: python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 09:44
von marconisahib
Danke für die schnelle Hilfe. Das wird mich weiter bringen.

Re: python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 10:21
von marconisahib
sorry, wie muss ich das %s anwenden?
Aus dem "show_entry_fields():" kommt doch immer ein string
der doch über Button "Show" auf der Konsole richtig angezeigt wird.

myexcall = kein(e1)
print ("myexcall = ", myexcall)
sparks = kein(e2)
print ("sparks = ",sparks)

Re: python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 13:34
von Sirius3
Welches %s? Du mußt e1.get aufrufen.

Re: python 2.7 Tkinter

Verfasst: Montag 25. Juni 2018, 14:32
von marconisahib
Jawoll - so geht es.

Meldungen nach show
excall: df3gu
OP name: klaus

Ich musste aber vorher bevor QUIT
# e1.delete(0,END)
# e2.delete(0,END)
herausnehmen

dann in der python-line
myexcall = e1.get()
print("eingaben = ", e1.get(), e2.get())
print ("myexcall = ", myexcall)
sparks = e2.get()
print ("sparks = ",sparks)


('eingaben = ', 'df3gu', 'klaus')
('myexcall = ', 'df3gu')
('sparks = ', 'klaus')

vielen Dank
wie wir Funker sagen: mni tks+