Gitternetz in Tabelle einfügen...?

Fragen zu Tkinter.
Antworten
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

hi nochmal:
hab jetzt den letzten tip (danke nochmal :) den ich bekommen hab,
in meinen code eingearbeitet (funktioniert alles)
und würde jetzt noch gern ein SCHÖNERES grid in die tabelle einfügen, als das hier:

Code: Alles auswählen

import Tkinter
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, vorname ASC")

liste = [['ID', 'Vorname', 'Nachname', 'Kto-Nummer']]
for row in cursor:
    konto = [row[0], row[2], row[3], row[1]]   
    aktuellesKonto = []
    for index in konto:
        aktuellesKonto.append(index)
    liste.append(aktuellesKonto)

window= Tkinter.Tk()
window.title('GUI-Verwaltung')

for row, items in enumerate(liste):
    for column, item in enumerate(items):

        gitter = Tkinter.Entry(window)                <------------------------------- das hier sieht nicht so gut aus....
        gitter.grid(row=row, column=column)            

        Tkinter.Label(window, text=item, bg='white').grid(column=column, row=row)

window.mainloop()
db.close()
gibs das noch was besseres, so dass das alles einheitlicher aussieht?
Zuletzt geändert von Anonymous am Dienstag 7. Juli 2015, 17:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@DMD: Das hat nicht einmal etwas mit aussehen zu tun: Mehr als ein Widget in die gleiche Grid-Zelle zu platzieren würde ich als Programmfehler ansehen. Das `Entry` solltest Du weglassen. So etwas setzt man nicht nur aus optischen Gründen (hoffentlich) in den Hintergrund sondern verwendet es wenn man ein Eingabefeld braucht.

Du könntest ausprobieren was mit der `relief`-Option der `Label`-Exemplare optisch möglich ist.

Es gibt immer noch ein SELECT das zwar durchgeführt aber gar nicht gebraucht wird in dem Code. Ich glaube da wurdest Du schon einmal drauf hingewiesen.

Sternchen-SELECTs sind in der Regel keine gute Idee. Man sieht beim lesen des Quelltexts nicht was und wieviel da selektiert wird, und durch Änderungen an der Spaltenanzahl oder Reihenfolge kann man sich das Programm kaputtmachen, beziehungsweise man muss dann alle Sternchenselektionen durchgehen und schauen ob in im Programm in der weiteren Verarbeitung des Ergebnisses Änderungen durchgeführt werden müssen.

Wenn man die Werte in der SQL-Abfrage schon in der gewünschten Reihenfolge schreibt braucht man im Programm keine Schleife mehr nur um die Werte in den Datensätzen in die richtige Reihenfolge zu bringen. Wobei die Zeilen 18 bis 20 (inklusive) nochmal zusätzlicher Unsinn sind der keinen Effekt hat ausser das Programm komplexer und langsamer zu machen. Die Zeilen 16 bis 21 könnte man durch ``liste.extend([row[0], row[2], row[3], row[1]] for row in cursor)`` als eine Zeile schreiben. Und wenn man im ``SELECT`` kein * sondern die Spaltennamen in der richtigen Reihenfolge verwendet dann reicht ein ``liste.extend(cursor)`` aus!

Einiges von den Importen wird gar nicht verwendet. Und die Struktur des Programms… nun ja es hat keine, da ist einfach Code linear auf Modulebene runtergeschrieben. Auf Modulebene gehört eigentlich nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Antworten