python 2.7 Tkinter

Fragen zu Tkinter.
Antworten
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

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?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

Danke für die schnelle Hilfe. Das wird mich weiter bringen.
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

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)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Welches %s? Du mußt e1.get aufrufen.
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

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+
Antworten