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?
python 2.7 Tkinter
@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.
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.
-
- User
- Beiträge: 22
- Registriert: Montag 25. Juni 2018, 08:34
Danke für die schnelle Hilfe. Das wird mich weiter bringen.
-
- 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)
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)
-
- 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+
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+