Was müsste mit "<<ListboxSelect>>" funktionieren? Was hättest Du denn bei der Ausgabe von ``print("<<ListboxSelect>>", Detail)`` anderes erwartet als da tatsächlich ausgegeben wurde? Das gibt den Text <<ListboxSelect>> aus und eine Zeichenkettendarstellung der Funktion `Detail`.
Was soll denn die GUI überhaupt machen? Also was steht in diesen Listboxen zur Auswahl und warum?
Natürlich kann man auf dem Raspi auch andere GUI-Rahmenwerke als Tk verwenden. Das ist letztendlich ja ein ganz normales Linux mit grafischer Oberfläche. Man kann also beispielsweise auch GUIs mit Gtk oder Qt schreiben.
Listboxen
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Code: Alles auswählen
import tkinter as tk
import functools
def mein_toller_callback(a, b, c, d, e, f):
print(a, b, c, d, e, f)
def main():
root =tk.Tk()
button = tk.Button(
root,
text="Drueck mich feste",
command=functools.partial(
mein_toller_callback,
"mit",
"einer",
"unglaublichen",
"anzahl",
"an",
"argumenten",
)
)
button.pack()
root.mainloop()
if __name__ == '__main__':
main()
Hi _deets_ , danke für die Mühe mir zu helfen.
Jetzt zeig mir doch bitte wie ich konkret die, ich sag mal Referenz, jede Listbox auch mit gleichen Namen hat eine eigene " .67967184" die ich beim erstellen auch auslesen kann. Und diese Referenz verflixt nochmal, sollte doch beim ".bind<<ListboxSelect>>" irgendwie zu gebrauchen sein.
Ein Bierchen steht.
Jetzt zeig mir doch bitte wie ich konkret die, ich sag mal Referenz, jede Listbox auch mit gleichen Namen hat eine eigene " .67967184" die ich beim erstellen auch auslesen kann. Und diese Referenz verflixt nochmal, sollte doch beim ".bind<<ListboxSelect>>" irgendwie zu gebrauchen sein.

@mosimfs: dass Tkinter da Nummern vergibt, ist ein internes Implementierungsdetail. In Python gibt es Objekte, die die Listboxen repräsentieren, und die benutzt man auch.
Für Dein konkretes Beispiel:
Für Dein konkretes Beispiel:
Code: Alles auswählen
def details(listbox, event):
print(listbox.selection_get())
[...]
listbox = create_listbox(window, number, "Text")
listbox.bind("<<ListboxSelect>>", functools.partial(details, listbox))
@mosimfs: ich verstehe nicht, was Du mit Sternen und Fragezeichen meinst. Kannst Du konkret das Problem beschreiben, das Du jetzt noch hast? Mit genug Kontext, was denn Dein Ziel ist, um es zu verstehen, und nicht so, wie Du denkst, dass es als Code umzusetzen wäre.
Hi, damit ".bind" aufgeführt wird braucht es ein Objekt, in meinem Fall halt den Listpox Namen. Der, durch die For-schleife immer gleich ist und dadurch immer die letzte die abrufbare ist. Wie im Vorfeld schon beschrieben reagieren ja alle auf anklicken, nur bekomme ich keinen Listbox Nahmen. Sorry meine Syntaxbezeichnen sind alles andere als . . .
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mosimfs: Du musst halt die `bind()`-Methode aufrufen wenn Du das jeweilige `Listbox`-Objekt an den/einen Namen gebunden hast. Falls das aus irgendwelchen Gründen an der Stelle nicht geht oder nicht passieren soll (warum?), dann musst Du Dir die Objekte beispielsweise in einer Liste merken und dann wenn Du die `bind()`-Methode aufrufen willst eine Schleife über diese Liste schreiben und `bind()` auf jedem `Listbox`-Objekt aufrufen.
Ob es vielleicht auch aus anderen Gründen Sinn machen könnte die `Listbox`\en in einer Liste zu sammeln, kann ich nicht sagen, weil ich immer noch nicht verstanden habe welches grundsätzliche Problem das ganze eigentlich lösen soll. Du beschreibst hier ja immer nur das was Du für eine Lösung hältst, nie was da eigentlich gelöst werden soll.
Ob es vielleicht auch aus anderen Gründen Sinn machen könnte die `Listbox`\en in einer Liste zu sammeln, kann ich nicht sagen, weil ich immer noch nicht verstanden habe welches grundsätzliche Problem das ganze eigentlich lösen soll. Du beschreibst hier ja immer nur das was Du für eine Lösung hältst, nie was da eigentlich gelöst werden soll.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Hallo
(Durchblicker),
Jetzt funktioniert's ! Dein letzter Beitrag, da ist bei mir der Groschen gefallen.
>>> ================================ RESTART ================================
>>>
Programm gestartet am: 05.07.2019
Neuer Ordner wird bei Jahreswechsel angelegt!
27. 11:16 06_Moser_Franz_huckepack.jpg
dieser Eintrag kommt aus einer der Listboxen
und der wird den weiteren Verlauf ermöglichen.
Werte Hilfesteller:
Weil ich gerade den Beitrag von @wurschtbrot, "Variablen mit for Schleife erzeugen" gelesen hab.
Seine letzten Beiträge könnten meine sein, in den jungen Jahren hab ich mich mit Basic auch Visual Basic und Lisp(ACAD) auseinander gesetzt.
Nach langen jetzt, juckt mich der Raspi wieder. Von Grund auf den Syntax von Python zu lernen, ich bin kein Student. Ich will eine Idee verwirklichen.
vielen Dank Euch.
Übrigens, eine Frage zu *.eml Dateianhang auslesen von Mail's. Wo platziert man das im Forum am gescheitesten.

Jetzt funktioniert's ! Dein letzter Beitrag, da ist bei mir der Groschen gefallen.
Code: Alles auswählen
try:
f = open(SO+datei, "r")
x=0
for Text in f:
Text = Text.split(" | ")
Text = Text[0][0:2] + ". " + Text[0][12:17] + " " + Text[1] + " "
Text = Text[0:39]
x+=1
if a==0:
Daten(x, Text) # Listbox erzeugen
z = x
if m == 1:
Daten(z, Text)
f.close()
Eingang.config(text= Y+"-Eingänge ", bg="#fff")
except IOError:
Eingang.config(text= " keine Daten vorhanden ", bg="#fff")
z=0
#----------------------------------------------------------------------------
def Daten(z, MEtext):
Anzeige = {}
Anzeige[z]=Listbox(master=Startfenster, height=1, width=35, bd=2, font=("Courier", 13), relief=RAISED)
Anzeige[z].insert(END, MEtext)
if z <= 26:
Anzeige[z].grid(column=0, row=z, columnspan=5, pady=3, padx=3, sticky=W)
elif z > 26 and z <= 52:
Anzeige[z].grid(column=5, row=z-26, columnspan=11, pady=3, padx=3, sticky=W)
elif z > 52 and z <= 78:
Anzeige[z].grid(column=11, row=z-52, columnspan=16, pady=3, padx=3, sticky=W)
elif z > 78 and z <= 104:
Anzeige[z].grid(column=17, row=z-78, columnspan=20, pady=3, padx=3, sticky=W)
Anzeige[z].bind("<<ListboxSelect>>", Detail) # Eintrag abfragen
#----------------------------------------------------------------------------
def Detail(event):
event.widget.unbind("<<ListboxSelect>>")
name = event.widget.get (int(event.widget.curselection()[0]))
Seitelöschen()
Knipserseite(name)
>>> ================================ RESTART ================================
>>>
Programm gestartet am: 05.07.2019
Neuer Ordner wird bei Jahreswechsel angelegt!
27. 11:16 06_Moser_Franz_huckepack.jpg
dieser Eintrag kommt aus einer der Listboxen

und der wird den weiteren Verlauf ermöglichen.
Werte Hilfesteller:
Weil ich gerade den Beitrag von @wurschtbrot, "Variablen mit for Schleife erzeugen" gelesen hab.
Seine letzten Beiträge könnten meine sein, in den jungen Jahren hab ich mich mit Basic auch Visual Basic und Lisp(ACAD) auseinander gesetzt.
Nach langen jetzt, juckt mich der Raspi wieder. Von Grund auf den Syntax von Python zu lernen, ich bin kein Student. Ich will eine Idee verwirklichen.
vielen Dank Euch.
Übrigens, eine Frage zu *.eml Dateianhang auslesen von Mail's. Wo platziert man das im Forum am gescheitesten.
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das mit `z` und den ganzen ``if``/``elif``-Zweigen ist auch übermässig kompliziert. Spalte und Zeile sollten sich aus `z` einfach berechnen lassen. Die `columnspan`-Werte machen keinen Sinn so unregelmässig wie die sind. Das sieht so aus, als wäre da zu viel in *einem* Grid angeordnet, statt die GUI-Bereiche in eigene Container zu stecken.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
und gleich nochmal:
Damit der Text dessen Länge ja variiert, in der Listbox dessen Breite vorgegeben ist linksbündig angezeigt wird formatiere ich so.
Text = Text[0][0:2] + ". " + Text[0][12:17] + " " + Text[1] + " "
Text = Text[0:39] was der Lostbox Breite entspricht, wobei hier je nach Länge leider auch ein Teil abgezwickt wird.
Wie macht's der Profi ?
Ps: Hab deine Beiträge erst jetzt gesehen. Du wirst das Foto der Startseite noch nicht angeschaut haben.
Damit der Text dessen Länge ja variiert, in der Listbox dessen Breite vorgegeben ist linksbündig angezeigt wird formatiere ich so.
Text = Text[0][0:2] + ". " + Text[0][12:17] + " " + Text[1] + " "
Text = Text[0:39] was der Lostbox Breite entspricht, wobei hier je nach Länge leider auch ein Teil abgezwickt wird.
Wie macht's der Profi ?
Ps: Hab deine Beiträge erst jetzt gesehen. Du wirst das Foto der Startseite noch nicht angeschaut haben.
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mosimfs: Der Profi schreibt Namen die nicht für Konstanten oder Klassen stehen klein_mit_unterstrichen, vermeidet ”magische” Indexzahlen wenn man die Elemente an sprechendere Namen binden kann, und Zeichenkettenformatierung statt zusammenstückeln mit ``+``. Die `Listbox`-Breite wird im Code mit 35 angegeben und nicht mit 38. Ich sehe auch nicht so ganz warum man den Text rechts mit Leerzeichen auffüllen sollte.
Ausserdem verwendet der Profi für alles aussagekräftige Namen, hat keine globalen Variablen im Programm, keine komischen Trennlinienkommentare, benennt Funktionen und Methoden nach den Tätigkeiten die sie ausführen, verwendet bei GUIs objektorientierte Programmierung, …
Falls mit „Du“ ich gemeint war – ich habe mir das Bild von der GUI angesehen. Warum? Falls Du denkst das beantwortet meine Frage danach was mit dieser GUI eigentlich gemacht werden soll und welches Problem diese Listboxen lösen sollen: Ich habe keine Ahnung was Du damit machen/erreichen willst.
Ausserdem verwendet der Profi für alles aussagekräftige Namen, hat keine globalen Variablen im Programm, keine komischen Trennlinienkommentare, benennt Funktionen und Methoden nach den Tätigkeiten die sie ausführen, verwendet bei GUIs objektorientierte Programmierung, …
Falls mit „Du“ ich gemeint war – ich habe mir das Bild von der GUI angesehen. Warum? Falls Du denkst das beantwortet meine Frage danach was mit dieser GUI eigentlich gemacht werden soll und welches Problem diese Listboxen lösen sollen: Ich habe keine Ahnung was Du damit machen/erreichen willst.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Hallo, der ProgrammCode ist ja für mich und ob ich A, a, oder _ verwende macht doch für die Fragen keinen Unterschied. Die Abweichung 35 zu 38 braucht's, da sonst bei "grid" der Text sofern er länger ist auch vorne abgezwickt wird. Eine Lösung ist gefragt, nicht ein schöner Code.
lg und nicht persönlich nehmen.
lg und nicht persönlich nehmen.
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mosimfs: A, a, oder _ macht für die Frage keinen Unterschied, aber für diejenigen die versuchen wollen zu Antworten. Die müssen nämlich verstehen was da gemacht wird, und das ist nun mal einfacher wenn das da verständlich steht und nicht wenn es unverständlich dasteht. ”Schöner” Code *ist* die Lösung für viele Probleme. Das ”schön” ist ja keine Frage von das es irgendwie ”hübsch” aussieht, sondern das es sauber, verständlich, nachvollziehbar ausgedrückt ist. Das verhindert Fehler. Gute Namensgebung ist nichts was man vielleicht irgendwann einmal später macht, wenn alles läuft, sondern das ist wichtig und sollte von Anfang eine wichtige Rolle spielen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.