Seite 1 von 1

Tabelle mit tkinter

Verfasst: Samstag 30. Mai 2009, 10:47
von py-mule
Hallo zusammen,

ich schreibe mit tkinter ein Prog das ich später für Windoof umwandeln möchte, in dem eine Tabelle sichtbar sein soll. Kann ich das in einem Text-widget machen? Wenn ja wie? Gibt es eine bessere Möglichkeit, als ein Text-widget?

Kennt jemand eine deutsche Anleitung in der auf diese Problematik, möglichst mit Beispielen, eingegangen wird?

Viele Grüße
py-mule

Re: Tabelle mit tkinter

Verfasst: Samstag 30. Mai 2009, 11:05
von numerix
py-mule hat geschrieben:ich schreibe mit tkinter ein Prog das ich später für Windoof umwandeln möchte, in dem eine Tabelle sichtbar sein soll. Kann ich das in einem Text-widget machen? Wenn ja wie? Gibt es eine bessere Möglichkeit, als ein Text-widget?
Kommt auf deine Vorstellungen an die optische Qualität an und darauf, ob es nur eine Anzeige-Tabelle sein soll, oder auch in den Zellen der Tabelle Änderungen vorgenommen werden können, aber ein Text-Widget würde ich eher nicht einsetzen, weil es auf jeden Fall am Ende sch** aussieht.

Wenn es nur um die Anzeige geht, könnte ein Canvas-Widget die Lösung sein. Wenn du keinen fixed-Font verwendest, kann das aber zur Bastelei werden.

Oder du baust dir selbst ein Tabellen-Widget aus einem Grid mit vielen Labels oder - falls du Eingaben brauchst - ggf. auch mit Entry-Widgets. Könnte man auch so umsetzen, dass für die Anzeige Labels verwendet werden und man z.B. erst durch Doppelklick auf ein Label (= Zelle der Tabelle) dieses in ein Entry umwandelt und das Editieren erlaubt.
py-mule hat geschrieben:Kennt jemand eine deutsche Anleitung in der auf diese Problematik, möglichst mit Beispielen, eingegangen wird?
Ich nicht.

Verfasst: Samstag 30. Mai 2009, 16:29
von derdon
[wiki]Tkinter/Tabellen-Widget[/wiki]

Verfasst: Samstag 30. Mai 2009, 22:13
von py-mule
An die Optik habe ich keine großen Anforderungen, außer, daß ich etwa 6 verschiedenbreite Spalten nebeneinander und etwa max. 50 Zeilen untereinander generieren möchte, dazu ein scrollbar brauche und den Inhalt der Tabelle später in einer txt Datei so abspeichern möcht, daß wenn ich diese txt wieder aufrufe, alle Einträge der Tabelle an der richtigen Stelle stehen. Diese Tabelle soll schließlich ausfruckbar sein.

Geht so etwas mit dem text-widget? Wenn ja, wie?

Andere Möglichkeiten habe ich mir angeschaut, wie Tktabel und Tix, aber das finde ich auch irgendwie unbefriedigend.

Gruß
py-mule

Verfasst: Samstag 30. Mai 2009, 23:59
von yipyip
Meinst Du etwas in dieser Richtung?

http://paste.pocoo.org/show/119989/

:wink:
yipyip

Verfasst: Sonntag 31. Mai 2009, 12:08
von pyStyler
Hallo,

hier mal was zum testen!
http://sourceforge.net/projects/tkintertable/

Gruss
pyStyler

Verfasst: Sonntag 7. Juni 2009, 21:17
von py-mule
Erstmal danke bis dahin,

ich habe mich, nachdem ich mir angeschaut habe, was hier für Vorschläge gemacht wurden, entschieden, meine Tabelle mit Entrys in einem Canvas Fenster zu realisieren. as bietet sogar den Vorteil, daß ich keine feste Tabelle definieren muss, sondern bei Bedarf einzelne Zeilen hinzufügen kann.

Leider entstehen dabei neue Probleme:

1. Scrollbar scrollt nicht

2. Wie lese ich nun die Inhalte der Tabelle aus, um diese in einer Liste zeilenweise in einer txt Datei zu speichern, wenn ich auf den "Tabelle speichern" Button drücke?

Code: Alles auswählen

from Tkinter import *

ROWS = 1

def neue_Zeile():
    global ROWS
    
    artikel_nummer = StringVar()
    eingabe200 = Entry(canvas, width=30, textvariable=artikel_nummer)
    eingabe200.grid(row=ROWS, column=0)
    artikel_nummer_get = artikel_nummer.get()

    bezeichnung = StringVar()
    eingabe201 = Entry(canvas, width=30, textvariable=bezeichnung)
    eingabe201.grid(row=ROWS, column=1)
    bezeichnung_get = bezeichnung.get()

    anzahl = StringVar()
    eingabe202 = Entry(canvas, width=60, textvariable=anzahl)
    eingabe202.grid(row=ROWS, column=2)
    anzahl_get = anzahl.get()

    ROWS = ROWS + 1

def tabelle_speichern():
    pass


root = Tk()

frame = Frame(root) 
frame.pack()

scrollbar = Scrollbar(frame)
scrollbar.pack(side = RIGHT, fill = Y)

canvas = Canvas(frame, width=826, height=2, bg='white', scrollregion=(0, 0, 1000, 1000), yscrollcommand=scrollbar.set)
canvas.pack(side = RIGHT, fill = Y)

but1 = Button(canvas, text = 'neue Zeile' , command = neue_Zeile, width=30, height=2)
but1.grid(row = 0, column=0)

but2 = Button(canvas, text = 'Tabelle speichern' , command = tabelle_speichern, width=30, height=2)
but2.grid(row = 0, column=1)

lab1 = Label(canvas, width = 60, height = 2)
lab1.grid(row = 0, column=2)

Viele Grüße,
py-mule