hi, ich bins wieder
kann mir jemand sagen, wie ich nach dem auslesen von adressen aus meiner datenbank, die einzelnen elemente (d.h. erstes adresselement nach dem ersten durchgang, zweites element nach dem dritten durchgang...) direkt einzelnd anzeigen lassen kann oder noch
besser, den code dafür geben, wie ich die elemente einzelnd in das tabellenfenster bekomme?
ich hab schon das netz durchforstet, leider kein ergebnis...
wär schön das mal hinzubekommen
# Auslesen der Adressen aus Datenbank
from Tkinter import *
import tkMessageBox
import tkintertable
import sqlite3
import os
from operator import itemgetter, attrgetter, methodcaller
#Auslesen der Datenbank:
db = sqlite3.connect('C:\\Users\\DMD-OL\\Desktop\\Verwaltung Arbeitszeit\\Adressendateien\\adressenliste.db')
cursor = db.cursor()
cursor.execute("SELECT ktoNum, vorname, nachname FROM adressenliste")
cursor.execute("SELECT * FROM `adressenliste` ORDER BY `nachname` ASC")
counter = 0
for row in cursor:
aktuellesKonto= ('{0} {3} {1}'.format(row[2], row[1], row[0], row[3]))
counter = counter + 1
print aktuellesKonto
print row
db.close()
Printausgabe aktuellesKonto:
Hans Meyer 10
Peter Meyer 1
Bildung Lücke 7
Printausgabe row:
(1, 0, u'asdf', u'asdf', u'asdf', u'asdf', 0, u'9.00 - 9.15', u'12.30 - 13.15')
#Erstellung Tkinter-Fenster:
root = Tk()
root.title('GUI-Verwaltung')
height = counter +1
width = 3
for z in range(height): #Zeile
for s in range(width): #Spalte
myGrid = Entry(root)
myGrid.config(relief="sunken", bg="#ddddddddd", fg="#000000000", justify='center') # width=20,
myGrid.grid(row=z, column=s)
for z in range(height): #Zeile
for s in range(width): #Spalte
datenzeile = StringVar()
datenzeile.set(aktuellesKonto)
entry_1 = Entry(textvariable=datenzeile).grid(row=z, column=s) #<-- die Printausgabe soll nacheinander in die Entries der Tabelle eingelesen werden
root.mainloop()
... mit diesem code setzt er nur die zuletzt ausgelesene adresse in die tabelle ein, und zwar vorname, nachname, ktonr in jedes einzelne entry
muss ich nach jedem durchgang mit db.commit() speichern? ...bin am ende...
Einzelnes Element nach Auslesen einer Datenbank aufrufen?
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
In den beiden `for..` Loops, die das Grid durchlaufen, steht `datenzeile.set(aktuellesKonto)` - und `aktuellesKonto` wird darin eben _nicht_ verändert.
Vom vorgehen her musst du halt über den Ergebnis-Cursor iterieren und dir die Daten in Tkinter anzeigen lassen. Hier bietet sich IMHO wohl auch eher eine Tabelle an als ein Grid.
Gruß, noisefloor
Genau das ist ja auch so im Quelltext definiert... mit diesem code setzt er nur die zuletzt ausgelesene adresse in die tabelle ein, und zwar vorname, nachname, ktonr in jedes einzelne entry
In den beiden `for..` Loops, die das Grid durchlaufen, steht `datenzeile.set(aktuellesKonto)` - und `aktuellesKonto` wird darin eben _nicht_ verändert.
Vom vorgehen her musst du halt über den Ergebnis-Cursor iterieren und dir die Daten in Tkinter anzeigen lassen. Hier bietet sich IMHO wohl auch eher eine Tabelle an als ein Grid.
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
vom Prinzip ist das schon gut, was du vorhast - du musst halt nur den Code richtig "sortieren" und während du das Grid-Layout generierst über den Ergebnis-Cursor iterieren. Das mit dem `print` brauchst du nicht.
Ein einfaches Tabellen-Layout bekommst du so:
Funktioniert, ist aber optisch kein Highlight
Gruß, noisefloor
vom Prinzip ist das schon gut, was du vorhast - du musst halt nur den Code richtig "sortieren" und während du das Grid-Layout generierst über den Ergebnis-Cursor iterieren. Das mit dem `print` brauchst du nicht.
Ein einfaches Tabellen-Layout bekommst du so:
Code: Alles auswählen
import tkinter
my_data = [['foo', 'bar', 'spamegg'],
['1', '2', '3'],
['4', '5', '6']]
window = tkinter.Tk()
for row, items in enumerate(my_data):
for column, item in enumerate(items):
tkinter.Label(window,
text=item).grid(column=column, row=row)
window.mainloop()
Gruß, noisefloor