Ich habe in Python einen Datenbankzugriff, mit dem ich Termine aus einer DB hole - die Termine bekomme ich dann in ein dictionary, das wie folgt aussieht: dict = {'2020-11-11 11:11': 'Bla'} Hier die DB-Zugriffsklasse:
[CODE lang="python" title="dbaccess.py"]import psycopg2
def doQuery(conn):
appntments = {}
cur = conn.cursor()
cur.execute("SELECT datum, termin FROM appointment")
for date, appointment in cur.fetchall():
appntments[date] = appointment
return appntments
def allAppointments():
hostname = "localhost"
username = "postgres"
password = "root"
database = "dtls"
myConnection = psycopg2.connect( host=hostname, user=username, password=password, dbname=database )
res = doQuery(myConnection)
return res
[/CODE]
Hier ist meine Hauptklasse mit dem Mainwindow:
Mein Plan ist folgender. Wenn ich einen del-Button drücke, dann möchte ich einen Termin (den Termin, der sich auf der Zeile mit dem del-Button befindet) löschen. Diese Logik werde ich dann noch implementieren, ebenso werde ich anhand eines Kalenderwidgets eine Monats, Jahres und Tagesansicht mir ausgeben lassen, aber auch das kommt noch - nun mein Problem:
Den Code der Hauptklasse kann ich so nicht ausführen, es kommt immer die Fehlermeldung:
Traceback (most recent call last):
File "C:\Users\XXX\Documents\workspace\pycrm\core\__init__.py", line 124, in <module>
main()
File "C:\Users\XXX\Documents\workspace\pycrm\core\__init__.py", line 119, in main
MainWindow.restart(filterwert)
TypeError: restart() missing 1 required positional argument: 'filterwert'
Irgendwie bekomme ich da bei der Methode button_released, main und restart etwas mit dem "self" nicht hin. Ich kriege es aber nicht hin - woran könnte das liegen :\ ?
[CODE lang="python" title="dbaccess.py"]import psycopg2
def doQuery(conn):
appntments = {}
cur = conn.cursor()
cur.execute("SELECT datum, termin FROM appointment")
for date, appointment in cur.fetchall():
appntments[date] = appointment
return appntments
def allAppointments():
hostname = "localhost"
username = "postgres"
password = "root"
database = "dtls"
myConnection = psycopg2.connect( host=hostname, user=username, password=password, dbname=database )
res = doQuery(myConnection)
return res
[/CODE]
Hier ist meine Hauptklasse mit dem Mainwindow:
Python:
import sys
import datetime
from PyQt5.QtWidgets import (QWidget, QGridLayout,QPushButton, QApplication, QScrollArea, QMainWindow, QToolBar, QMenu, QLabel, QCalendarWidget)
from PyQt5.QtCore import Qt, QSize
from PyQt5 import QtWidgets, uic, QtCore, QtGui
from core import dbaccess
class MainWindow(QMainWindow):
singleton: 'MainWindow' = None
def __init__(self, filterwert):
super().__init__()
tb = QToolBar(self)
cal = QCalendarWidget(self)
cal.setGridVisible(True)
tb.addWidget(cal)
tb.setAllowedAreas(Qt.TopToolBarArea)
tb.setFloatable(False)
tb.setMovable(False)
self.addToolBar(tb)
dict = dbaccess.allAppointments()
grid_layout = QGridLayout()
self.widget = QWidget()
self.widget.setLayout(grid_layout)
self.scroll = QScrollArea()
button = QPushButton(' Kalenderwoche--------------------- Datum des Termins mit Wochentag - Termin (zum Bearbeiten klicken)')
button.setStyleSheet("text-align: left;font-weight: bold; font-size: 14px; color:black")
button.setEnabled(False)
grid_layout.setAlignment(Qt.AlignTop)
grid_layout.addWidget(button, 0, 0, 1, 3)
create = QPushButton("create")
create.resize(10, 10)
grid_layout.addWidget(create, 0, 3, 1, 3)
dict = dbaccess.allAppointments()
keys = []
for k in dict.keys():
keys.append(k)
values = []
for v in dict.values():
values.append(v)
i=0
for x in range(1, len(dict)+1):
for y in range(0, 4):
button = QPushButton(values[i])
date = QPushButton(keys[i])
date.setEnabled(False)
delete = QPushButton("del")
delete.resize(10, 10)
delete.setObjectName('Button%d' % x)
delete.released.connect(self.button_released)
if y == 0:
grid_layout.addWidget(date, x, y)
if y == 1:
dt = date.text().split(" ")[0].split("-")
intDay = datetime.date(year=int(dt[0]), month=int(dt[1]), day=int(dt[2])).weekday()
days = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
date.setText(date.text() + ", " + days[intDay])
#self.testMethode("cd")
grid_layout.addWidget(date, x, y)
if y == 2:
grid_layout.addWidget(button, x, y)
if y == 3:
grid_layout.addWidget(delete, x, y)
i+=1
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll.setWidgetResizable(True)
self.scroll.setWidget(self.widget)
self.setCentralWidget(self.scroll)
self.setWindowTitle("CRM")
self.setAttribute(Qt.WA_StyledBackground, True)
self.setStyleSheet('background-color: lightgreen;')
self.setGeometry(90, 90, 855, 600)
self.show()
return
def button_released(self):
sending_button = self.sender()
print(sending_button.objectName())
##TODO: Hier dann erst das, was wir nicht mehr brauchen aus der DB löschen!
filterwert = ('', '', '')
self.restart(filterwert)
@staticmethod
def restart(self, filterwert):
MainWindow.singleton = MainWindow(filterwert)
#def testMethode(self, cd):
# print("test")
def main():
app = QtWidgets.QApplication(sys.argv)
filterwert = ('', '', '')
MainWindow.restart(filterwert)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Mein Plan ist folgender. Wenn ich einen del-Button drücke, dann möchte ich einen Termin (den Termin, der sich auf der Zeile mit dem del-Button befindet) löschen. Diese Logik werde ich dann noch implementieren, ebenso werde ich anhand eines Kalenderwidgets eine Monats, Jahres und Tagesansicht mir ausgeben lassen, aber auch das kommt noch - nun mein Problem:
Den Code der Hauptklasse kann ich so nicht ausführen, es kommt immer die Fehlermeldung:
Traceback (most recent call last):
File "C:\Users\XXX\Documents\workspace\pycrm\core\__init__.py", line 124, in <module>
main()
File "C:\Users\XXX\Documents\workspace\pycrm\core\__init__.py", line 119, in main
MainWindow.restart(filterwert)
TypeError: restart() missing 1 required positional argument: 'filterwert'
Irgendwie bekomme ich da bei der Methode button_released, main und restart etwas mit dem "self" nicht hin. Ich kriege es aber nicht hin - woran könnte das liegen :\ ?