GUI – 38 Eingabefelder und 38 Beschriftungen
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo!
Mit der bekannten GUI möchte ich derzeit nur erreichen, dass in einem Anzeige-Label ausgegeben wird, was ins Feld "nummer" eingetragen wurde. Jedoch erhalte ich ständig:
Erbitte Hilfe!
Grüße
Strawk
Mit der bekannten GUI möchte ich derzeit nur erreichen, dass in einem Anzeige-Label ausgegeben wird, was ins Feld "nummer" eingetragen wurde. Jedoch erhalte ich ständig:
Bei einem Vergleichsprogramm funktioniert das tadellos und ich habe keinerlei Idee, wo der Unterschied sein soll.AttributeError: 'NoneType' object has no attribute 'get'
Erbitte Hilfe!
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
@Strawk: die Glaskugel sagt nur Schneegestöber und der Kaffeesatz ist schon in der Bio-Tonne.
Ach ja, Nachtrag:
Ach ja, Nachtrag:
Code: Alles auswählen
class Main(tk.Tk):
def __init__(self):
super(Main, self).__init__()
self.entries = generate_form(self, LABELS)
`super` ist in Python 3 noch superer geworden:
Die beiden Argumente sind optional.
Code: Alles auswählen
class Main(tk.Tk):
def __init__(self):
super().__init__()
self.entries = generate_form(self, LABELS)
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo!
Ich konnte das Unter-Problem identifizieren.
funktioniert nicht und macht:
funktioniert.
Grüße
Strawk
Ich konnte das Unter-Problem identifizieren.
Code: Alles auswählen
e_nummer = tkinter.Entry(master).grid(row=0, column=0)
AberAttributeError: 'NoneType' object has no attribute 'get'
Code: Alles auswählen
e_nummer = tkinter.Entry(master)
e_nummer.grid(row=0, column=0)
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Code: Alles auswählen
import tkinter
# Funktion zu den Schaltflächen
def ende():
master.destroy()
def anzeigen():
eingabe = e_nummer.get()
l_anzeige["text"] = eingabe
master = tkinter.Tk()
master.geometry("800x600+30+30")
# nummer, codierung
e_nummer = tkinter.Entry(master)
e_nummer.grid(row=0, column=0)
e_codierung = tkinter.Entry(master).grid(row=1, column=0)
tkinter.Label(master, text="nummer").grid(row=0, column=1)
tkinter.Label(master, text="codierung").grid(row=1, column=1)
# name_oder_firmenname, geburtsname, vorname_bezeichnung
tkinter.Entry(master).grid(row=0, column=2)
tkinter.Entry(master).grid(row=2, column=2)
tkinter.Entry(master).grid(row=4, column=2)
tkinter.Label(master, text="name_oder_firmenname").grid(row=1, column=2)
tkinter.Label(master, text="geburtsname").grid(row=3, column=2)
tkinter.Label(master, text="vorname_bezeichnung").grid(row=5, column=2)
# strasse_hausnummer, plz, ort_stadt
tkinter.Entry(master).grid(row=0, column=3)
tkinter.Entry(master).grid(row=2, column=3)
tkinter.Entry(master).grid(row=4, column=3)
tkinter.Label(master, text="strasse_hausnummer").grid(row=1, column=3)
tkinter.Label(master, text="plz").grid(row=3, column=3)
tkinter.Label(master, text="ort_stadt").grid(row=5, column=3)
# ortsteil, bundesland_provinz_kanton, land_nation
tkinter.Entry(master).grid(row=0, column=4)
tkinter.Entry(master).grid(row=2, column=4)
tkinter.Entry(master).grid(row=4, column=4)
tkinter.Label(master, text="ortsteil").grid(row=1, column=4)
tkinter.Label(master, text="bundesland_provinz_kanton").grid(row=3, column=4)
tkinter.Label(master, text="land_nation").grid(row=5, column=4)
# fahrzeugfabrikat, fahrzeugtyp, kfz_kennzeichen_historie
tkinter.Entry(master).grid(row=6, column=2)
tkinter.Entry(master).grid(row=8, column=2)
tkinter.Entry(master).grid(row=10, column=2)
tkinter.Label(master, text="fahrzeugfabrikat").grid(row=7, column=2)
tkinter.Label(master, text="fahrzeugtyp").grid(row=9, column=2)
tkinter.Label(master, text="kfz_kennzeichen_historie").grid(row=11, column=2)
# landesvorwahl, festnetzvorwahl, festnetznummer
tkinter.Entry(master).grid(row=6, column=3)
tkinter.Entry(master).grid(row=8, column=3)
tkinter.Entry(master).grid(row=10, column=3)
tkinter.Label(master, text="landesvorwahl").grid(row=7, column=3)
tkinter.Label(master, text="festnetzvorwahl").grid(row=9, column=3)
tkinter.Label(master, text="festnetznummer").grid(row=11, column=3)
# aktiv, mobile_vorwahl, mobiler_anschluss
tkinter.Entry(master).grid(row=6, column=4)
tkinter.Entry(master).grid(row=8, column=4)
tkinter.Entry(master).grid(row=10, column=4)
tkinter.Label(master, text="aktiv").grid(row=7, column=4)
tkinter.Label(master, text="mobile_vorwahl").grid(row=9, column=4)
tkinter.Label(master, text="mobiler_anschluss").grid(row=11, column=4)
# e_mail_1, e_mail_2, url
tkinter.Entry(master).grid(row=12, column=2)
tkinter.Entry(master).grid(row=14, column=2)
tkinter.Entry(master).grid(row=16, column=2)
tkinter.Label(master, text="e_mail_1").grid(row=13, column=2)
tkinter.Label(master, text="e_mail_2").grid(row=15, column=2)
tkinter.Label(master, text="url").grid(row=17, column=2)
# geschlecht, anzahl_kinder, verstorben_am_um
tkinter.Entry(master).grid(row=12, column=3)
tkinter.Entry(master).grid(row=14, column=3)
tkinter.Entry(master).grid(row=16, column=3)
tkinter.Label(master, text="geschlecht").grid(row=13, column=3)
tkinter.Label(master, text="anzahl_kinder").grid(row=15, column=3)
tkinter.Label(master, text="verstorben_am_um").grid(row=17, column=3)
# geburtstag, anzahl_ereignisse, memos
tkinter.Entry(master).grid(row=12, column=4)
tkinter.Entry(master).grid(row=14, column=4)
tkinter.Entry(master).grid(row=16, column=4)
tkinter.Label(master, text="geburtstag").grid(row=13, column=4)
tkinter.Label(master, text="anzahl_ereignisse").grid(row=15, column=4)
tkinter.Label(master, text="memos").grid(row=17, column=4)
# fax, titel, beruf
tkinter.Entry(master).grid(row=18, column=2)
tkinter.Entry(master).grid(row=20, column=2)
tkinter.Entry(master).grid(row=22, column=2)
tkinter.Label(master, text="fax").grid(row=19, column=2)
tkinter.Label(master, text="titel").grid(row=21, column=2)
tkinter.Label(master, text="beruf").grid(row=23, column=2)
# ausbildung, taetigkeit, taetig_in_firma
tkinter.Entry(master).grid(row=18, column=3)
tkinter.Entry(master).grid(row=20, column=3)
tkinter.Entry(master).grid(row=22, column=3)
tkinter.Label(master, text="ausbildung").grid(row=19, column=3)
tkinter.Label(master, text="taetigkeit").grid(row=21, column=3)
tkinter.Label(master, text="taetig_in_firma").grid(row=23, column=3)
# hobbys, herkunftsland, bekanntschaft_seit
tkinter.Entry(master).grid(row=18, column=4)
tkinter.Entry(master).grid(row=20, column=4)
tkinter.Entry(master).grid(row=22, column=4)
tkinter.Label(master, text="hobbys").grid(row=19, column=4)
tkinter.Label(master, text="herkunftsland").grid(row=21, column=4)
tkinter.Label(master, text="bekanntschaft_seit").grid(row=23, column=4)
b_anzeige = tkinter.Button(master, text="Anzeigen",
command = anzeigen).grid(row=31, column=2)
l_anzeige = tkinter.Label(master)
l_anzeige.grid(row=36, column=2)
bende = tkinter.Button(master, text="Ende", command = ende)
bende.grid(row=31, column=3)
master.mainloop()
GrüßeImportError: No module named tkinter
Strawk
Ich programmiere erfolglos, also bin ich nicht.
@Strawk: Du hast wohl verschiedene Python-Versionen installiert. Nimm einfach die richtige. Mit Deinem jetzigen Vorgehen, alles linear runterzuprogrammieren, wirst Du nicht glücklich werden. Nimm Dir die Zeit, und lerne die Grundlagen von Python.
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo Nutzer!
Für meine Datenbank-GUI möchte ich zwei große Frames nebeneinander. Im linken die Eingabemaske aus 38 Entry- und Label-Feldern, im rechten eine großes Ausgabetextfenster mit vertikaler Scrollbar. Aktuelles Problem: die Widgets wollen nicht in den Frame wandern; ich erhalte die Meldung:
Wie lautet die korrekte Syntax, um die Widgets in den Frame zu bekommen?
Liebe Grüße
Strawk
P.S.: An Sirius3 - Ich habe ein ganzes Python-Buch minutiös durchgeackert. Meinst du nicht auch, irgendwann muss man mal das freie Programmieren anfangen?
Für meine Datenbank-GUI möchte ich zwei große Frames nebeneinander. Im linken die Eingabemaske aus 38 Entry- und Label-Feldern, im rechten eine großes Ausgabetextfenster mit vertikaler Scrollbar. Aktuelles Problem: die Widgets wollen nicht in den Frame wandern; ich erhalte die Meldung:
Der entsprechende Code-Schnipsel:TypeError: Tkinter objects don't support 'in' tests.
Code: Alles auswählen
master = tk.Tk()
master.geometry("1500x600+30+30")
fr1 = Frame(master, width=600, height=550, relief="sunken", bd=1)
fr1.grid(row=1, column=1)
# nummer, codierung
e_nummer = Entry(master, fr1)
e_nummer.grid(row=0, column=0)
e_codierung = Entry(master, fr1)
e_codierung.grid(row=1, column=0)
Liebe Grüße
Strawk
P.S.: An Sirius3 - Ich habe ein ganzes Python-Buch minutiös durchgeackert. Meinst du nicht auch, irgendwann muss man mal das freie Programmieren anfangen?
Ich programmiere erfolglos, also bin ich nicht.
Da in den gesamten Code-Schnipsel *kein* "in" vorkommt, passt der nicht zur Fehlermeldung.Strawk hat geschrieben:Hallo Nutzer!
Für meine Datenbank-GUI möchte ich zwei große Frames nebeneinander. Im linken die Eingabemaske aus 38 Entry- und Label-Feldern, im rechten eine großes Ausgabetextfenster mit vertikaler Scrollbar. Aktuelles Problem: die Widgets wollen nicht in den Frame wandern; ich erhalte die Meldung:
Der entsprechende Code-Schnipsel:TypeError: Tkinter objects don't support 'in' tests.
...
Und bezueglich der Grundlagen: die scheinen immer noch zu fehlen, Buch durchgearbeitet hin oder her. Wir kommentieren hier was wir sehen.
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo Sirius3, __deets__!
Sirius3, dein Beispiel funktioniert bei mir nicht. Auch nicht mit deinem Nachtrag und dem von narpfel. Ich arbeite mit Python 2.7 und der Shell "Anaconda Navigator / Spyder".
__deets__, im gesamten Skript ist kein "in". Die Bedeutung der Fehlermeldung muss wohl eine andere sein.
Ich möchte bitte für meinen Code nur die Syntax, wie ich die Widgets in den Frame bekommen. Danke!
Grüße
Strawk
Sirius3, dein Beispiel funktioniert bei mir nicht. Auch nicht mit deinem Nachtrag und dem von narpfel. Ich arbeite mit Python 2.7 und der Shell "Anaconda Navigator / Spyder".
__deets__, im gesamten Skript ist kein "in". Die Bedeutung der Fehlermeldung muss wohl eine andere sein.
Ich möchte bitte für meinen Code nur die Syntax, wie ich die Widgets in den Frame bekommen. Danke!
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
@Strawk: widgets in ein anderes widget bekommt man, indem man das Objekt als parent-Objekt uebergibt. So, wie das in deinem von dir selbst geposteten Beispiel passiert. Wo also liegt die Unklarheit?
Und du packst eine Fehlermeldung dazu, die mit dem problem halt nichts zu tun hat. Was anderes kann man dazu nicht sagen :K
Und du packst eine Fehlermeldung dazu, die mit dem problem halt nichts zu tun hat. Was anderes kann man dazu nicht sagen :K
@__deets__: das `in` steht ja auch in den Funktionen, die aufgerufen werden. Natürlich wäre da der gesamte Traceback hilfreich gewesen.
@Strawk: welche Python-Version Du im Moment benutzt, kann niemand erraten, weil Du die ständig wechselst. Ich schreibe hier keinen Code, der sofort benutzbar ist, sondern die Konzepte zeigen soll, die Du, wenn Du Dir die Mühe gemacht hast, zu verstehen, wie das Programm arbeitet, leicht auf Dein Problem übertragen kannst. Daher: mein Code zeigt wie man Widgets in Frames packt.
@Strawk: welche Python-Version Du im Moment benutzt, kann niemand erraten, weil Du die ständig wechselst. Ich schreibe hier keinen Code, der sofort benutzbar ist, sondern die Konzepte zeigen soll, die Du, wenn Du Dir die Mühe gemacht hast, zu verstehen, wie das Programm arbeitet, leicht auf Dein Problem übertragen kannst. Daher: mein Code zeigt wie man Widgets in Frames packt.
@Strawk: Unter Python 2.7 heißt das Modul `Tkinter`. Von daher sieht das eher nach Python 3 aus. Was sagt `sys.version` (in der selben Umgebung wie das Programm ausgeführt)?
Zu der Fehlermeldung: Guck’ dir nochmal an, was für eine Signatur `tk.Entry` hat und was du übergibst. Ansonsten: Bitte poste den gesamten Traceback, nicht nur die letzte Zeile. Dann kann man schneller und einfacher den Fehler erkennen, ohne dabei raten zu müssen.
Zu dem Beispiel von Sirius3: Auch hier ist es im Sinne der Problemlösung hilfreich, wenn du den gesamten Traceback (und eventuell auch den Code, wenn du ihn verändert hast), zeigst.
Zu der Fehlermeldung: Guck’ dir nochmal an, was für eine Signatur `tk.Entry` hat und was du übergibst. Ansonsten: Bitte poste den gesamten Traceback, nicht nur die letzte Zeile. Dann kann man schneller und einfacher den Fehler erkennen, ohne dabei raten zu müssen.
Zu dem Beispiel von Sirius3: Auch hier ist es im Sinne der Problemlösung hilfreich, wenn du den gesamten Traceback (und eventuell auch den Code, wenn du ihn verändert hast), zeigst.
Ahhh. Jetzt erst sehe ich das.Sirius3 hat geschrieben:@__deets__: das `in` steht ja auch in den Funktionen, die aufgerufen werden. Natürlich wäre da der gesamte Traceback hilfreich gewesen.
@Strawk: du uebergibst Entry zwei Widgets. Willst offensichtlich, das das zweite davon der Parent ist. Warum also das erste ueberhaupt angeben?
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo!
Bin jetzt einen Schritt weiter und die Widgets sind im Frame.
Aktuelles Problem: Ich habe die Datenbankabfrage in ein externes Skript und in eine dortige Funktion ausgelagert. Wie erreiche ich jetzt, dass das SQL-result im aufrufenden (Haupt-)Skript im Textfenster ausgegeben werden kann?
Bisher funktioniert das in beiden Richtungen nicht. Will heißen: Entweder kennt das Unter-Skript das Textfenster nicht, oder das Haupt-Skript kennt das SQL-result nicht. Gibt es einen Befehl, ein Objekt wie "result" global verfügbar zu machen? Oder wie anders realisiere ich das?
Grüße
Strawk
Bin jetzt einen Schritt weiter und die Widgets sind im Frame.
Aktuelles Problem: Ich habe die Datenbankabfrage in ein externes Skript und in eine dortige Funktion ausgelagert. Wie erreiche ich jetzt, dass das SQL-result im aufrufenden (Haupt-)Skript im Textfenster ausgegeben werden kann?
Bisher funktioniert das in beiden Richtungen nicht. Will heißen: Entweder kennt das Unter-Skript das Textfenster nicht, oder das Haupt-Skript kennt das SQL-result nicht. Gibt es einen Befehl, ein Objekt wie "result" global verfügbar zu machen? Oder wie anders realisiere ich das?
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo __deets__!
Nein, zur skriptübergreifenden Übergabe steht im Einstiegsbuch nichts. Wäre es ein Ansatz, das SQL-Abfrageergebnis als Instanz einer Klasse zu gestalten? Wie sähe dann die Klassendefinition grob aus?
Grüße
Strawk
Nein, zur skriptübergreifenden Übergabe steht im Einstiegsbuch nichts. Wäre es ein Ansatz, das SQL-Abfrageergebnis als Instanz einer Klasse zu gestalten? Wie sähe dann die Klassendefinition grob aus?
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Natuerlich steht dazu etwas darin. Es behandelt Module, also die Aufteilung eines Programms in mehrere Teile. Und es behandelt Funktionen mit Parametern und Rueckgabewerten. Das findet sich im Inhaltsverzeichnis:
https://www.rheinwerk-verlag.de/einstie ... n_4374/toc
Deutlich vor der von dir angegebenen Seitennummer irgendwo bei 370.
Und die Ergebnisse einer Abfrage sind ja schon ein Objekt - naemlich ein Cursor. An sich kann man den auch einfach zurueckgeben. Allerdings kann man sich da Aerger einhandeln, weil dessen Gueltigkeit an der Verbindung und anderen Einfluessen haengt. Aber ein simples "return cursor.fetchall()" reicht, und du hast dein Objekt - eine Liste von Tupeln.
https://www.rheinwerk-verlag.de/einstie ... n_4374/toc
Deutlich vor der von dir angegebenen Seitennummer irgendwo bei 370.
Und die Ergebnisse einer Abfrage sind ja schon ein Objekt - naemlich ein Cursor. An sich kann man den auch einfach zurueckgeben. Allerdings kann man sich da Aerger einhandeln, weil dessen Gueltigkeit an der Verbindung und anderen Einfluessen haengt. Aber ein simples "return cursor.fetchall()" reicht, und du hast dein Objekt - eine Liste von Tupeln.
- Strawk
- User
- Beiträge: 233
- Registriert: Mittwoch 15. Februar 2017, 11:42
- Wohnort: Aachen
- Kontaktdaten:
Hallo __deets__!
Das funktioniert schon anhand einfacher Beispiele nicht.
ergibt
Strawk
Das funktioniert schon anhand einfacher Beispiele nicht.
Code: Alles auswählen
def testFunktion():
a = 42
return a
Code: Alles auswählen
import sys
sys.path.append('C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/Anaconda_Navigator/Liverecord_Python')
import aufgerufenes_skript_01
aufgerufenes_skript_01.testFunktion()
print a
GrüßeNameError: name 'a' is not defined
Strawk
Ich programmiere erfolglos, also bin ich nicht.