Tabelle mit tkinter

Fragen zu Tkinter.
Antworten
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

[wiki]Tkinter/Tabellen-Widget[/wiki]
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Meinst Du etwas in dieser Richtung?

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

:wink:
yipyip
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hallo,

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

Gruss
pyStyler
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
Antworten