Tkinter Tabelle ohne Listbox

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hallo!
Mr. Snedes Mehrspaltenlistbox hat mir schon gut gefallen, aber da das eine Listbox ist, und keine richtige Tabelle wie ich sie brauch(t)e, hab ich mal eine Tabelle geschrieben, bzw. bin noch dabei, aber da sie in der Grundversion schon einsetzbar ist, poste ichs mal hier. Dann könnt ihr schonmal den Code zerreißen und versuchen, mir bei den Problemen zu helfen.
(Wär ja auch doof, wenn ich jede Frage als neuen Thread im Tkinterforum poste und immer auf den gleichen Link verweise...)

Beschreibung:
  • sortierbar (auf, ab, nach id)
  • zeilenweise Editierbar
  • auch die Spaltennamen sind editierbar
  • scrollbar
  • Spaltenbreite änderbar (-> PanedWindow)
  • Datenspeicherung der Klasse in einem Dict, sodass man die Daten leicht verarbeiten bzw. auf sie zugreifen kann
  • Die Zeilen in den Spalten werden mit grid positioniert, sodass es übersichtlich bleibt. (Mit einer kleinen Codeänderung kann man die Spaltenhöhe leicht ändern)
Weitere Ideen/Probleme bei der Umsetzung dieser:
  • Zeilen/Spalten hinzufügen/löschen (noch keine Zeit gehabt)
  • Einträge verschieben, IDs ändern. -> sinnvoll? (tw. schon drin, läuft aber mit einigen Problemen, dh. sehr unkomfortabel -> Wie gehts besser?
    dazu noch:
  • nach sortieren verschieben nicht mehr möglich (ich weiß grad nicht, worans liegt. Die bindings werden doch mit den Labels erzeugt...)
  • beim Verschieben der Einträge bei Mausbewegung automatisch entgegenscrollen, möglichst nur am oberen und unteren Rand (-> schwierig, welches Scrollmaß pro Mausbewegung?)
Noch was zum Code:
  • Sorry für den Kommentarmix, das eine soll bleiben, das andere is nur zum Orientieren/Fehlerfinden und so...
  • Hat jemand mal nen kreativen Namen? Die, die mir so eingefallen sind, waren schon besetzt.
  • Wie man vlt. sieht etwas an die oben erwähnten MultiListbox angelehnt.
So, hier der Codelink: http://www.ubuntuusers.de/paste/11799/
(pocoo is zZ echt unzuverlässig, oder?)

MfG, jj
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Hatte noch keine Zeit den Code richtig anzuschauen, finde die Aktion mal richtig klasse.
Wollte ich nur mal schnell schreiben.

Werde das Ganze weiter beobachten und sicherlich auch mal im Code stöbern.

Was mir aufgefallen ist (damit dir nicht langweilig wird ;-) ):
Wenn ich auf einen Eintrag doppelklicke und dann die Editbox erhalte verschwindet diese nicht, sobald ich auf einen anderen Eintrag doppelklicke.

Manchmal ist es schwer (erfordert mehrere Wiederholungen) mit einem Doppelklick in den Editmodus zu wechseln.

Rechter Mausklick auf einen Eintrag löst einen Fehler aus

Die Panes lassen sich nicht verschieben.

Die Tabelle passt sich nicht ans Masterwidget an, wenn man es vergrößert.

Mein System: Debian Lenny mit Python2.4
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hi Mr_Snede!
Mr_Snede hat geschrieben:Hatte noch keine Zeit den Code richtig anzuschauen, finde die Aktion mal richtig klasse.
Wollte ich nur mal schnell schreiben.
Werde das Ganze weiter beobachten und sicherlich auch mal im Code stöbern.
Ja, ich kann jede Hilfe gebrauchen, hab grad viel zu viele Programme gleichzeitig in Entwicklung. Und wenn die neuen schon die halbneuen nutzen, sollten diese bald fertig werden.
Mr_Snede hat geschrieben:Was mir aufgefallen ist (damit dir nicht langweilig wird ;-) ):
Wenn ich auf einen Eintrag doppelklicke und dann die Editbox erhalte verschwindet diese nicht, sobald ich auf einen anderen Eintrag doppelklicke.
Das ist auch nicht so geplant, wobei das eigentlich besser wäre. Andererseits, wieso soll man nicht mehrere Felder gleichzeitig editieren können?
Mr_Snede hat geschrieben:Manchmal ist es schwer (erfordert mehrere Wiederholungen) mit einem Doppelklick in den Editmodus zu wechseln.
Rechter Mausklick auf einen Eintrag löst einen Fehler aus
Das erste versteh ich grad auch nicht.
Das zweite ist oben schon beschrieben: Am Anfang, kannst du bei gedrückter rechter Maustaste die einzelnen Einträge nach oben und unten ziehen und so umsortieren, auch wenns noch sehr schwierig ist. Wenn man aber die Tabelle sortiert hat, geht das nicht mehr, da die Events irgedwie von Widgets ausgelöst werden, die nicht mehr da sind, versteh ich auch nicht ganz... :cry:
Mr_Snede hat geschrieben:Die Panes lassen sich nicht verschieben.
Die Tabelle passt sich nicht ans Masterwidget an, wenn man es vergrößert.
Tja, das eine liegt am anderen, da man ja für die Spalten die Mindestbreite bei der __init__ mit an gibt. Wieso sie die Größe nicht an die des Masters anpasst, ist mir auch ein Rätsel, hatte es vergessen, oben auf die Liste zu schreiben. Ich hab auch schon alles versucht. :(

Gruß, jj
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

schlangenbeschwörer hat geschrieben: hab grad viel zu viele Programme gleichzeitig in Entwicklung.
Wer macht denn sowas? *unschuldig guck*

Ich habe kein Problem damit, wenn eine ganze Zeile editierbar erscheint. Nur wenn ich in die nächste Zeile klicker, darf die vorher bearbeitete Zeile gerne wieder in den Anzeigemodus zurück.

Ich habe als Nutzer ja so oder so nur einen Cursor um Werte zu verändern.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

http://nopaste.debianforum.de/6009

Habe ein wenig mit pack gespielt --> und es sieht beim resiezen noch fürchterlich aus bzw funzt nicht alles wie gewünscht. Aber vielleicht doch ein Ansatz.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Cool...Ich dachte grid und pack geht nicht, aber das bezieht sich nur auf eine Dimension, oder? Also alle Widgets eines Masters.
Kann man die Scrollregion bei Änderung des Masters anpassen? Also automatisch. Und wieso mag PanedWindow grid nicht? Fragen über Fragen...
Ich bau mal weiter.
:arrow: Wenn du noch was dran machen willst, sag vlt. mal über icq oder pn bescheid, denn ich schreibs ja immer weiter und wenns dann 2 Programme gibt, wo jeweils etwas verbessert ist, ist das mühevoll zusammenzufügen.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Genau pack und grid sollen nicht zusammen auf einem Widget benutzt werden.
Ein mit Pack plazierter Frame kann aber durchaus eine Buttonmatrix enthalten, die mit einem grid aufgezogen wurde.

Ich gedachte in den nächsten Tagen nicht daran rum zu basteln.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

So, mal ein kleines Update.

Vor allem hab ich ein Rechtsklick-Popup eingebaut, um einträge zu löschen und copy und paste ohne Tastenkombination zu ermöglichen. Ist aber noch recht einfach.
Zeilen hinzufügen kann man jetzt auch leicht.
Das mit dem Verschieben denke ich, packt man besser auch ins Popup, da die jetzige Lösung nicht richtig funtkioniert und mir auch nicht gefällt...

Gruß, jj
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

die URL lautet:
http://www.ubuntuusers.de/paste/11980/

In deinem Link ist ein "l" Am Ende zu viel

Bei mir verschwindet das Popupmenü nicht, solange kein Eintrag angewählt wurde.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Mr_Snede hat geschrieben: Bei mir verschwindet das Popupmenü nicht, solange kein Eintrag angewählt wurde.
Ah, stimmt.
Einfach die bind-Zeile in self.draw

Code: Alles auswählen

l.bind("<Button-3>", self._makepopup)
Löschen. In der edit-methode ist es schon auskommentiert (im Teil, wo der Eintrag deselektiert wird).
Antworten