Hallo zusammen, ich habe ein kleinen Tool geschrieben, welches das Anlegen von Anzeigen von Kleinanzeigen standardisiert und wesentlich vereinfacht. Ein Grafisches Tkinter Programm, mit einer Anlege-Seite welche inzwischen alles von mir gewünschte kann. Die angelegten Anzeigen werden in einzelnen Verzeichnissen abgelegt, dies Umfasst Bilder, textuelle Beschreibung sowie eine Konfig-Datei welche alle anderen Angaben enthält. Nun möchte ich in einem neuen Tab (den hab ich schon :) ) alle angelegten Anzeigen auflisten können. Dabei soll eine Zeile folgendes enthalten: Artikelname Ablaufdatum Einstellkonto (Frau-Ich) / Button-zum Editieren / Button-zum-Löschen Da wir im Winter über 100 Artikel eingestellt haben, sollte durch die Liste gescrollt werden können. Wie kann ich eine solche Grafische-Liste mit Buttons aus Textfiles dynamisch generieren lassen? Hat sowas schonmal jemand gemacht? Mir fehlt ein bisschen der Ansatz, wie sowas realisiert werden kann. Wär super wenn mir jemand einen Tip dazu geben könnte oder einen Link, oder ähnliches... Schöne Grüße, Matze
Matze schrieb: > Dabei soll eine Zeile folgendes enthalten: > Artikelname Ablaufdatum Einstellkonto (Frau-Ich) / Button-zum > Editieren / Button-zum-Löschen > > Da wir im Winter über 100 Artikel eingestellt haben, sollte > durch die Liste gescrollt werden können. > > Wie kann ich eine solche Grafische-Liste mit Buttons aus > Textfiles dynamisch generieren lassen? Es MUSS ein separater "Edit"-Butten für jeden Eintrag sein? Ein gemeinsamer Butten, der den Editor mit dem Artikel unter dem Scrollbalken startet, ist nicht akzeptabel?
Grummler schrieb: > Ein gemeinsamer Butten, der den Editor mit dem Artikel unter > dem Scrollbalken startet, ist nicht akzeptabel? Das wäre auch mein Vorschlag. Matze schrieb: > Wie kann ich eine solche Grafische-Liste mit Buttons aus Textfiles > dynamisch generieren lassen? > Hat sowas schonmal jemand gemacht? > Mir fehlt ein bisschen der Ansatz, wie sowas realisiert werden kann. > Wär super wenn mir jemand einen Tip dazu geben könnte oder einen Link, > oder ähnliches... Mit TkInter kenne ich mich nicht aus, aber richtig gut mit Tk ;-) Scrollfähige Objekte jeder Art kannst Du mit einem canvas erschlagen. Wenn es also unbedingt eine scrollbare Tabelle mit Buttons sein muss, legst Du entsprechende Zeilen bestehend aus Labeln für die Texte und Buttons dahinter an. Die scrollfähige Fläche des Canvas erweiterst Du dann passend zur Anzahl der Einträge mal Höhe in Pixeln. Und schon kannst Du rauf und runter scrollen. Beim Löschen von Einträgen verfährst Du ähnlich und schiebst dann die Zeilen zusammen. Ist aber lästig - ich würde mit einer listbox arbeiten. Eine andere Möglichkeit ist "table" - ich weiss aber nicht, ob es das unter TkInter gibt. Dort hat man die Möglichkeit von "Embedded Windows" (und damit auch Buttons) in jeder Zelle.
:
Bearbeitet durch Moderator
Hallo Matze, wäre es nicht einfacher, in einer Liste eine Zeile (= Datensatz) anzuklicken, den Datensatz in einem Fenster zu öffnen und DORT zu ändern oder einen Button zum Löschen anzubieten ? Zumindest habe ich das so mit Python Tkinter Sqlite gelöst. Erscheint mir einfacher zu sein als in jeder Tabellenzeile zwei Buttons zu plazieren. Michael S.
Erstmal Danke für alle 3 Antworten, wäre mit jedem von euren vorschlägen zufrieden :) Grummler schrieb: > Ein gemeinsamer Butten, der den Editor mit dem Artikel unter > dem Scrollbalken startet, ist nicht akzeptabel? Also wird dann das oberste Element der Liste welches im Scroll-Fenster oben angezeigt wird geöffnet? Oder ist mit unter dem Scrollbalken gemeint? Chris D. schrieb: > Wenn es also unbedingt eine scrollbare Tabelle mit Buttons sein muss, > legst Du entsprechende Zeilen bestehend aus Labeln für die Texte und > Buttons dahinter an. Die scrollfähige Fläche des Canvas erweiterst Du > dann passend zur Anzahl der Einträge mal Höhe in Pixeln. Und schon > kannst Du rauf und runter scrollen. Also brauche ich Klassen für die Anzahl der Zeilen, welche ich dann dynamisch je nach benötigter Anzahl anlegen kann. Die Pixelhöhe zu berechnen wäre dann einfach. Aber solche Buttons/Labels kann ich dann in das Canval-Bild einfügen? Sehe ich es richtig, dass es sich bei Canvas um ein erzeugtes Bild handelt? Michael S. schrieb: > wäre es nicht einfacher, in einer Liste eine Zeile (= Datensatz) > anzuklicken, den Datensatz in einem Fenster zu öffnen und DORT zu ändern > oder einen Button zum Löschen anzubieten ? Wäre von mir aus auch in ordnung, aber ich frage mich, wie ich die Scrollfähige Liste erzeugen kann. Darin sehe ich das hauptproblem, die Einzelelemente könnte ich ja auch z.b. per Eingabe der Zeilen-Nr. auswählen. --> Ich werde mich mal mit Canvas / Listboxen befassen... Soweit schonmal vielen Dank :)
Falls du noch größeres mit dem Tool vor hast - für die Kombination aus Python, scrollbarer Liste, Editfeldern und Datenbank ist PySide6 unschlagbar. Wenn du dich da mal eingearbeitet hast, willst du nie wieder zu Tk zurück.
Hallo zusätzlicher Kommentator. Noch ein Kommentar schrieb: > Falls du noch größeres mit dem Tool vor hast - für die Kombination aus > Python, scrollbarer Liste, Editfeldern und Datenbank ist PySide6 > unschlagbar. Wenn du dich da mal eingearbeitet hast, willst du nie > wieder zu Tk zurück. In Bezug auf Unkompliziertheit auch bei Installation ist tkinter unschlagbar, weil für die meisten Windows Versionen und die meisten Linux Distributionen das Python 3 Paket schon tkinter mitliefert. Wenn der TO also sein Programm bei den Kleinanzeigen mit verkaufen möchte, ist das ein starkes Verkaufsargument. ;O) Mit freundlichen Grüßen: Bernd Wiebus alias dl1eic http://www.l02.de
Hallo Matze, Dein Problem hatte ich (sofern ich es richtig verstanden habe) mit einem TreeView gelöst. Die relevanten Module sind zum Ausprobieren mal extrahiert in "Treeview.zip", so dass ein lauffähiges Teil-Testprogreamm entsteht (Ausführen von "change.py"). Es werden die Datensätze einer SQL-DB zeilenweise ausgegeben, gegliedert nach Kategorien. Ein Doppelklick öffnet den gewählten Datensatz zum Ändern oder Löschen. Vielleicht ist das ein Weg ? Michael S.
> In Bezug auf Unkompliziertheit auch bei Installation ist tkinter > unschlagbar Stimmt! Wenn es so weiter geht, wird dieses Problem das absolute KO Kriterium. Auf den Servern benutzen wir inzwischen Container, Cybernetics und all diesen irrsinnig komplexen Verwaltungskram. Niemand kann mehr einen konsistenten Satz an Abhängigkeiten installieren. Wollte mal ein Python Projekt, was unter Ubuntu lief, auf Windows benutzen. Habe nicht geschafft, alle Pakete gleichzeitig in der erforderlichen Version zu installieren.
Hallo zusammen, Bernd W. schrieb: > In Bezug auf Unkompliziertheit auch bei Installation ist tkinter > unschlagbar, weil für die meisten Windows Versionen und die meisten > Linux Distributionen das Python 3 Paket schon tkinter mitliefert. Dass sehe ich auch so, ich habe mir vor dem Beginn genau überlegt welche funktionen nötig sind. Von daher sollte tkinter eigentlich reichen. Michael S. schrieb: > Dein Problem hatte ich (sofern ich es richtig verstanden habe) mit einem > TreeView gelöst. Vielen Dank für die Idee mit dem Treeview, das scheint genau das zu sein was ich mir wünsche :) Eventuell baue ich meine Lösung auch noch darauf um... Tatsächlich habe ich das ursprüngliche Problem nun mit schrollbar gekoppelten 3 Listboxen gelöst. Kann nun also alle Daten wie gewünscht einlesen, sie sortieren und dann in 3 listboxen sozusagen als Spalten ausgeben :) Vielen Dank für Eure Ideen zur Problemlösung :)
Hallo Matze, Matze schrieb: > Bernd W. schrieb: >> In Bezug auf Unkompliziertheit auch bei Installation ist tkinter >> unschlagbar, weil für die meisten Windows Versionen und die meisten >> Linux Distributionen das Python 3 Paket schon tkinter mitliefert. > > Dass sehe ich auch so, ich habe mir vor dem Beginn genau überlegt welche > funktionen nötig sind. Von daher sollte tkinter eigentlich reichen. Die Idee ist grundsätzlich nicht schlecht, wenngleich ich persönlich heutzutage eher auf eine Webapplikation setzen würde, zum Beispiel mit Flask. Der wichtigste Vorteil: Du mußt das Ding nur an einer Stelle deployen und pflegen, alle Rechner im Netzwerk können mit einem ganz normalen Browser darauf zugreifen und es benutzen. > Michael S. schrieb: >> Dein Problem hatte ich (sofern ich es richtig verstanden habe) mit einem >> TreeView gelöst. > > Vielen Dank für die Idee mit dem Treeview, das scheint genau das zu sein > was ich mir wünsche :) Ja, ttk.Treeview ist schon eine feine Sache. Vielleicht möchtest Du Dir auch einmal tksheet [1] anschauen. tksheet ist zwar eine externe Abhängigkeit, aber man kann Python-Skripte mitsamt ihrer Module recht leicht in komprimierte, ausführbare Zip-Archive einpacken. Die brauchen auf der Zielplattform dann nur einen installierten Python-Interpreter. Dazu habe ich Dir ein kleines Beispiel in den Anhang gepackt. Aber Achtung: bei binären Abhängigkeiten (also solchen, die .dll- oder .so-Dateien enthalten) geht die Plattformunabhängigkeit verloren, da würden sich eher andere Methoden anbieten. Es gibt auch Lösungen, die den Python- in C++-Code übersetzen und daraus dann ein Executable machen, das dann aber natürlich plattformabhängig ist. Eine mittlerweile recht ausgereifte Lösung dafür ist nuitka [2]. Ein wenig anders und nur für Windows funktioniert py2exe [3], es gibt aber noch eine Reihe anderer Projekte mit ähnlichen Zielen. Ansonsten gibt es sehr komfortable Möglichkeiten, eine Laufzeitumgebung systemunabhängig und portabel zu gestalten. Für Entwickler ist vielleicht Poetry [4] besonders modern und komfortabel. Ich persönlich benutze aus Gründen der Gewohnheit allerdings noch virtualenv, obwohl es mittlerweile das Modul venv in Pythons Standarddistribution gibt. Poetry verwaltet die installierten Module in einer TOML-Datei, während sich bei virtualenv und venv ganz leicht mit "pip freeze" eine Datei namens "requirements.txt" erstellen und in einer anderen virtuellen Umgebung mit "pip install -r requirements.txt" die ursprüngliche Umgebung 1:1 mit allen Paketen und Modulen in den richtigen Versionen wiederherstellen läßt. Ähnliche Funktionen bietet auch die vor allem bei Data Scientists recht beliebte Python-Distribution Anaconda. Ich persönlich rate von Anaconda allerdings lieber ab, weil es manchmal veraltete Paketversionen mitbringt und daher mit den im vorigen Absatz genannten Werkzeugen mitunter leider inkompatibel sein kann. YMMV. ;-) [1] https://github.com/ragardner/tksheet [2] https://nuitka.net/ [3] https://www.py2exe.org/ [4] https://python-poetry.org/
Verdammt, Anhang vergessen, bitte entschuldigt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.