Ich hab da mal wieder ein Problem, was für euch bestimmt ganz einfach zu lösen ist.

Beschreibung:
ich lasse mir in 3 Listboxen Sachen aus einer Datenbank ausgeben.
Wenn diese Listboxen 'voll' sind, dann kann man scrollen und es bleibt immer alles in einer Zeile was zusammen gehört.
Problem:
Nun möchte ich ab und an auch mal was daraus löschen und bekomme es nicht hin. (wer hätte es gedacht?)
Ich denke, dass das Problem ist, dass ich nur eine der Listboxen auswählen "kann" und die Anderen beiden nicht in der selben Zeile
mit ausgewählt werden und dass ein paar Argumente fehlen.
Kann natürlich auch an was ganz anderem liegen.
Freue mich auf kreative Lösungsansätze oder Lösungen
Wenn noch irgendwas komisch ist, dann sagt ruhig bescheid, bin noch am lernen.
"Extraaufgabe"
Die Einträge nach Datum sortieren (Datumsformat soll in der Schreibweise bleiben)
Danke im Voraus und schön mal schönes Wochenende
hier mein Code wie ich es mir gedacht habe:
Code: Alles auswählen
from tkinter import *
import sqlite3
import os
DB='test_db.db'
if not os.path.isfile(DB):
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute('''CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name INTEGER NOT NULL,
action INTEGER NOT NULL,
result VARCHAR,
date VARCHAR)''')
c.execute('''INSERT INTO test VALUES
(NULL,
'Klaus',
'rennen',
'gefallen',
'09.07.2020') ''')
conn.commit()
conn.close()
class MultipleScrollingListbox(Tk):
def __init__(self):
Tk.__init__(self)
self.scrollbar = Scrollbar(self)
self.scrollbar.config(command=self.yview)
self.scrollbar.pack(side='right', fill='y')
self.list1 = Listbox(self, yscrollcommand=self.yscroll1)
self.list1.pack(fill='y', side='left')
self.list2 = Listbox(self, yscrollcommand=self.yscroll2)
self.list2.pack(expand=1, fill='both', side='left')
self.list3 = Listbox(self, yscrollcommand=self.yscroll3)
self.list3.pack(expand=1, fill='both', side='left')
self.btn = Button(self, text='löschen', command=self.loeschen)
self.btn.pack(fill='both', side='top')
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute('''SELECT
date,
action,
result
FROM
test''')
records=c.fetchall()
for record in records:
self.list1.insert(END,record[0])
self.list2.insert(END,record[1])
self.list3.insert(END,record[2])
def loeschen(self):
if self.list1.curselection() and self.list2.curselection() and self.list3.curselection():
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute('''DELETE FROM
test
WHERE
and name = 'klaus'
and action = :action
and result = :result
and date = :date
''',
{
'action' : self.list2.curselection(),
'result' : self.list3.curselection(),
'date' : self.list1.curselection()
})
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute('''SELECT
date,
action,
result
FROM
test''')
records=c.fetchall()
for record in records:
self.list1.insert(END,record[0])
self.list2.insert(END,record[1])
self.list3.insert(END,record[2])
def yscroll1(self, *args):
if self.list2.yview() != self.list1.yview():
self.list2.yview_moveto(args[0])
self.scrollbar.set(*args)
if self.list3.yview() != self.list1.yview():
self.list3.yview_moveto(args[0])
self.scrollbar.set(*args)
def yscroll2(self, *args):
if self.list1.yview() != self.list2.yview():
self.list1.yview_moveto(args[0])
self.scrollbar.set(*args)
def yscroll3(self, *args):
if self.list1.yview() != self.list3.yview():
self.list1.yview_moveto(args[0])
self.scrollbar.set(*args)
def yview(self, *args):
self.list1.yview(*args)
self.list2.yview(*args)
self.list3.yview(*args)
if __name__ == "__main__":
test= MultipleScrollingListbox()
test.mainloop()