Forum: PC-Programmierung Python Tkinter Scrollbare Liste + Buttons mit Text aus Datei erzeugen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Matze (Gast)


Lesenswert?

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

von Grummler (Gast)


Lesenswert?

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?

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

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
von Michael S. (Gast)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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 :)

von Noch ein Kommentar (Gast)


Lesenswert?

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.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

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

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Noch ein Kommentar (Gast)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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 :)

von Ein T. (ein_typ)


Lesenswert?

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/

von Ein T. (ein_typ)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.