SQL-Abfrage-Ergebnisse in tkinter

Ich habe eine tkinter-Schnittstelle, wo ich noch etwas zeigen Abfrage-Ergebnisse, und ich brauche für den Benutzer zu ändern, können Sie eine Spalte und legen die Ergebnisse. Derzeit ziehen die Abfragen mache ich etwas wie dieses:

conn = connection_info_goes_here
cur = conn.cursor()
cur.execute(query_goes_here)

- Und dies ist meine Abfrage:

SELECT id, reviewer, task, num_seconds, start_time, end_time
FROM hours
WHERE DATE(start_time) = '2014-12-18'
AND reviewer = 'john'

Den Bereich, den der Benutzer ändern muss, ist num_seconds (nur zahlen). Meine Frage ist, wie mache ich die Abfrage Ergebnisse zeigen, im Netz und wie kann ich eines der Felder, die änderbar mit einer Schaltfläche zum Absenden der änderungen?

Zusätzliche info: ich habe bereits mit einer sehr unordentlichen Weise mit exec() und programmgesteuert erstellen von Variablen für jedes Feld. Es wurde sehr lange und verwirrend, und ich glaube wirklich, es muss einen besseren und einfacheren Weg, dies zu tun.

Jede Hilfe ist willkommen. Danke!!

Kurzes Update: da war auf Eis gelegt, ich werde fügen Sie ein Bild von etwas ähnlich zu dem, was ich Suche:

SQL-Abfrage-Ergebnisse in tkinter

Die Werte in den Eingabe-label muss ersetzen Sie die Werte in der Spalte auf der rechten Seite, wenn ich wieder hochladen in die DB.

Wenn ich sage, ich habe diese in einem unordentlichen Weise, ist, weil ich (die einzige Möglichkeit die ich mir vorstellen könnte):

def cor_window():
    corrections = Tk()
    corrections.title("Corrections")
    corrections_frame = ttk.Frame(corrections)

    cor_values = []
    count=0
    cor_count=0
    for x in results:
        count2=0
        for y in results[count]:

            if count2 == 3:
                exec('int' + str(cor_count) + '=tkinter.StringVar')
                exec('int' + str(cor_count) + '_entry = ttk.Entry(corrections, width=20, textvariable=int' + str(cor_count) + ')')
                exec('int' + str(cor_count) + '_entry.grid(column=count2, row=count+2)')

                cor_count = cor_count+1
                cor_values.append('int' + str(cor_count) + '_entry')

                ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)

            elif count2 > 3:
                ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)
            else:
                ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2, row=count+2)
            count2=count2+1
        count=count+1

    ttk.Button(corrections, text="Done!", command=upload_cor).grid(column=0, row=1)

Wo results ist die Liste mit den query-Ergebnisse und upload_cor ist die Funktion, die das hochladen werden die änderungen an der DB. Da ich exec, auch wenn der Benutzer ändert den Eintrag im Feld, die ich nicht benutzen kann .get() zu bekommen, was der Benutzer eingetippt hat. Wenn ich versuche, verwenden .get(), bekomme ich nur None auch wenn etwas eingegeben wurde, in das Eingabefeld.

Ich brauche nur eine andere Methode, dies zu tun, wieder, alle Ideen sind willkommen.

  • num_seconds verwenden würde, ein Eintrag (oder eine Liste von Eintrags-IDs) und der rest würde von Etiketten. Sie hätte auch zu link die Nummer der Zeile auf den Datensatz und vergleichen Sie jeden Eintrag auf den ursprünglichen Wert, um zu sehen, welche Zeilen sich geändert haben, aber wenn die "id" eindeutig ist, dann sollte es einfach sein. Entry-widget info effbot.org/tkinterbook/entry.htm
InformationsquelleAutor rodrigocf | 2014-12-19
Schreibe einen Kommentar