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.
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/