Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Frage zu qt Python und ausgelagerten Klassen
QtWS25 Last Chance

Frage zu qt Python und ausgelagerten Klassen

Scheduled Pinned Locked Moved Unsolved German
7 Posts 3 Posters 804 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    Califax
    wrote on 19 Sept 2023, 15:12 last edited by Califax
    #1

    Hallo
    Bin neu in Python und verstehe das Konzept der Klassen nicht.

    Folgende Bedingungen:
    -ich arbeite mit QTCreator

    • mit dem QTCreator hab ich ein Projekt Anwendung(QT für Python) -> Fenster -Ui erstellt
    • darin sind folgende Py-Dateien
      mainwindow.py
      form.ui
      ui_form.py
      usw...
      In der mainwindow.py ist die Klasse "class MainWindow(QMainWindow,Ui_StartFenster):" definiert

    In dem Fenster ist eine Tabelle (QTableWidget) eingezeichnet.
    Diese wird mit sqlite daten gefüllt.(Funktioniert)
    Das füllen derTabelle habe ich in einer Funktion (def loaddata1(self):) der Klasse "class MainWindow(QMainWindow,Ui_StartFenster):" definiert
    Nun möchte ich die Funktion "loaddata1" aber in einer eigenständigen Klassen (eigene Datei "DB_Schnitt.py" )auslagern.

    Ich habe keine Anhnung wie ich die Funktion (Methode) richtig schreiben muss und wie ich die Tabelle damit füllen kann.

    Über Eure Hilfe wäre ich sehr dankbar.

    Gruß Califax

    DB_Schnitt1.py

    # This Python file uses the following encoding: utf-8
    import sqlite3
    from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem
    #from mainwindow import MainWindow
    
    class DB_Schnitt:
        def __init__(self):
            pass
    
    
        def ist_db_Datei_vorhanden1():
    
            print ("ja1")
    
       # def loaddata1(self):
         #       #Verbindung zur sqlite3-Datenbank herstellen und GUI-Tabelle mit Daten füllen
        #        con_db=sqlite3.connect("Haushaltsbuch/STL_HR_DB.sdb")
        #        start_fenster = MainWindow()
         #       #Hier wird die Tabelle "Haushaltsbuch" aufgerufen und es werden nur 3 Datensätze ausgelesen
        #        sql_Befehl= "SELECT * FROM Haushaltsbuch LIMIT 30"
         #       result = con_db.execute(sql_Befehl)
          #      #self.tbl_eingabeTabelle.setRowCount(0)
         #       start_fenster.bl_eingabeTabelle.setRowCount(0)
    
    
          #      for row_number,row_data in enumerate(result):
          #        # self.tbl_eingabeTabelle.insertRow(row_number)
          #          start_fenster.tbl_eingabeTabelle.insertRow(row_number)
    
          #          for column_number, data in enumerate(row_data):
          #             #  self.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
           #             start_fenster.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
    
            #    con_db.close()
    
    

    mainwindow.py

    # This Python file uses the following encoding: utf-8
    import sys
    import os
    import sqlite3
    
    from DB_Schnitt1 import DB_Schnitt
    
    
    from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem
    from PySide6 import QtSql
    
    # Important:
    # You need to run the following command to generate the ui_form.py file
    #     pyside6-uic form.ui -o ui_form.py, or
    #     pyside2-uic form.ui -o ui_form.py
    from ui_form import Ui_StartFenster
    from ui_About import Ui_cls_About
    
    class MainWindow(QMainWindow,Ui_StartFenster):
        def __init__(self, parent=None):
            super().__init__(parent)
           # self.ui = Ui_StartFenster()
           # self.ui.setupUi(self)
            self.setupUi(self)
            self.menue_Beenden.triggered.connect(self.close)
            self.menue_Info.triggered.connect(self.info_oeffnen)
            self.menue_Jahrgang.triggered.connect(self.arbeits_pfad_pruefen)
           # self.bt_Versuch.clicked.connect(self.Konstrukter_1)
            #Hier wird die Breite der Spalte 7(0 mitgezählt) auf 400 gestellt
            self.tbl_eingabeTabelle.setColumnWidth(6,400)
    
    
            self.mod_offene_Leistungen = QtSql.QSqlRelationalTableModel()
            self.mod_offene_Leistungen.setTable("Haushaltsbuch")
            self.mod_offene_Leistungen.setRelation(1,QtSql.QSqlRelation("Haushaltsbuch","id","Zaehler"))
            self.tbl_eingabeTabelle.setItemDelegate(QtSql.QSqlRelationalDelegate())
            self.leistungen_anzeigen()
    
            DB_Schnitt.ist_db_Datei_vorhanden()
            #self.DB_Schnitt.loaddata1()
            self.loaddata11()
    
    
    
    
    
        def leistungen_anzeigen(self):
               model = self.mod_offene_Leistungen
              # query = QtSql.QSqlQuery()
              # abfrage = """ update Leistungen set
              #               Summe_brutto = Menge * Preis,
              #               Summe_netto = Menge * (Preis / (100.00 + mwst) *100)"""
             #  query.exec(abfrage)
               model.select()
               #self.tbl_eingabeTabelle.setModel(model)
               #gesamt_brutto = sum([model.data(model.index(zeile,8)) for zeile in range(model.rowCount())])
              # t = f"Offene Leistunge ({ gesamt_brutto:0.2f} € )"
              # self.lb_offene_Leistung.setText(t)
    
    
        def info_oeffnen(self):
           # stl = STL_HRKalender()
            #stl.ausgabefenster()
            cls_About.exec_()
    
        def loaddata11(self):
                #Verbindung zur sqlite3-Datenbank herstellen und GUI-Tabelle mit Daten füllen
                con_db=sqlite3.connect("Haushaltsbuch/STL_HR_DB.sdb")
                #Hier wird die Tabelle "Haushaltsbuch" aufgerufen und es werden nur 3 Datensätze ausgelesen
                sql_Befehl= "SELECT * FROM Haushaltsbuch LIMIT 130"
                result = con_db.execute(sql_Befehl)
                self.tbl_eingabeTabelle.setRowCount(0)
    
                for row_number,row_data in enumerate(result):
                    self.tbl_eingabeTabelle.insertRow(row_number)
                    for column_number, data in enumerate(row_data):
                        self.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
    
                con_db.close()
    
        def arbeits_pfad_pruefen(self):
    
            msg = QMessageBox()
            msg.setWindowTitle("Meldung")
            arbeits_ordner1 = os.path.dirname(__file__)
            #msg.setText(arbeits_ordner1)
            #x = msg.exec_()
            arbeits_ordner = os.path.isdir(os.path.join("Haushaltsbuch"))
    
            if  arbeits_ordner:
               # msg.setText("Der Ordner Haushaltsbuch ist vorhanden!! " )
                x = msg.exec_()
                #print (arbeits_ordner)
                wert = True
                return wert
            else:
                msg.setText("""
                Bitte legen Sie einen Ordner mit dem Namen
                          #Haushaltsbuch#
                an.
                Darin wird dann die Sqlite Datenbank gespeichert.
                Aktueller Pfad ist
                """)
                x = msg.exec_()
                #print (arbeits_ordner)
               # self.bt_beenden()
                wert = False
                return wert
    #db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
    #db.setDatabaseName("STL_HR_DB.sdb")
    #db.setDatabaseName("Haushaltsbuch/STL_HR_DB.sdb")
    
    
    class CLS_About(QDialog,Ui_cls_About):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setupUi(self)
            self.bt_beenden.clicked.connect(self.beenden)
    
        def beenden(self):
            #Your desired functionality here
            print("Er wurde beenden des unter Fensters gedrückt!!!")
            #import sys
            self.close()
    
    
    
    
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        widget = MainWindow()
        cls_About = CLS_About()
        widget.show()
        sys.exit(app.exec())
    
    
    jsulmJ 1 Reply Last reply 20 Sept 2023, 05:31
    0
    • C Califax
      19 Sept 2023, 15:12

      Hallo
      Bin neu in Python und verstehe das Konzept der Klassen nicht.

      Folgende Bedingungen:
      -ich arbeite mit QTCreator

      • mit dem QTCreator hab ich ein Projekt Anwendung(QT für Python) -> Fenster -Ui erstellt
      • darin sind folgende Py-Dateien
        mainwindow.py
        form.ui
        ui_form.py
        usw...
        In der mainwindow.py ist die Klasse "class MainWindow(QMainWindow,Ui_StartFenster):" definiert

      In dem Fenster ist eine Tabelle (QTableWidget) eingezeichnet.
      Diese wird mit sqlite daten gefüllt.(Funktioniert)
      Das füllen derTabelle habe ich in einer Funktion (def loaddata1(self):) der Klasse "class MainWindow(QMainWindow,Ui_StartFenster):" definiert
      Nun möchte ich die Funktion "loaddata1" aber in einer eigenständigen Klassen (eigene Datei "DB_Schnitt.py" )auslagern.

      Ich habe keine Anhnung wie ich die Funktion (Methode) richtig schreiben muss und wie ich die Tabelle damit füllen kann.

      Über Eure Hilfe wäre ich sehr dankbar.

      Gruß Califax

      DB_Schnitt1.py

      # This Python file uses the following encoding: utf-8
      import sqlite3
      from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem
      #from mainwindow import MainWindow
      
      class DB_Schnitt:
          def __init__(self):
              pass
      
      
          def ist_db_Datei_vorhanden1():
      
              print ("ja1")
      
         # def loaddata1(self):
           #       #Verbindung zur sqlite3-Datenbank herstellen und GUI-Tabelle mit Daten füllen
          #        con_db=sqlite3.connect("Haushaltsbuch/STL_HR_DB.sdb")
          #        start_fenster = MainWindow()
           #       #Hier wird die Tabelle "Haushaltsbuch" aufgerufen und es werden nur 3 Datensätze ausgelesen
          #        sql_Befehl= "SELECT * FROM Haushaltsbuch LIMIT 30"
           #       result = con_db.execute(sql_Befehl)
            #      #self.tbl_eingabeTabelle.setRowCount(0)
           #       start_fenster.bl_eingabeTabelle.setRowCount(0)
      
      
            #      for row_number,row_data in enumerate(result):
            #        # self.tbl_eingabeTabelle.insertRow(row_number)
            #          start_fenster.tbl_eingabeTabelle.insertRow(row_number)
      
            #          for column_number, data in enumerate(row_data):
            #             #  self.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
             #             start_fenster.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
      
              #    con_db.close()
      
      

      mainwindow.py

      # This Python file uses the following encoding: utf-8
      import sys
      import os
      import sqlite3
      
      from DB_Schnitt1 import DB_Schnitt
      
      
      from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem
      from PySide6 import QtSql
      
      # Important:
      # You need to run the following command to generate the ui_form.py file
      #     pyside6-uic form.ui -o ui_form.py, or
      #     pyside2-uic form.ui -o ui_form.py
      from ui_form import Ui_StartFenster
      from ui_About import Ui_cls_About
      
      class MainWindow(QMainWindow,Ui_StartFenster):
          def __init__(self, parent=None):
              super().__init__(parent)
             # self.ui = Ui_StartFenster()
             # self.ui.setupUi(self)
              self.setupUi(self)
              self.menue_Beenden.triggered.connect(self.close)
              self.menue_Info.triggered.connect(self.info_oeffnen)
              self.menue_Jahrgang.triggered.connect(self.arbeits_pfad_pruefen)
             # self.bt_Versuch.clicked.connect(self.Konstrukter_1)
              #Hier wird die Breite der Spalte 7(0 mitgezählt) auf 400 gestellt
              self.tbl_eingabeTabelle.setColumnWidth(6,400)
      
      
              self.mod_offene_Leistungen = QtSql.QSqlRelationalTableModel()
              self.mod_offene_Leistungen.setTable("Haushaltsbuch")
              self.mod_offene_Leistungen.setRelation(1,QtSql.QSqlRelation("Haushaltsbuch","id","Zaehler"))
              self.tbl_eingabeTabelle.setItemDelegate(QtSql.QSqlRelationalDelegate())
              self.leistungen_anzeigen()
      
              DB_Schnitt.ist_db_Datei_vorhanden()
              #self.DB_Schnitt.loaddata1()
              self.loaddata11()
      
      
      
      
      
          def leistungen_anzeigen(self):
                 model = self.mod_offene_Leistungen
                # query = QtSql.QSqlQuery()
                # abfrage = """ update Leistungen set
                #               Summe_brutto = Menge * Preis,
                #               Summe_netto = Menge * (Preis / (100.00 + mwst) *100)"""
               #  query.exec(abfrage)
                 model.select()
                 #self.tbl_eingabeTabelle.setModel(model)
                 #gesamt_brutto = sum([model.data(model.index(zeile,8)) for zeile in range(model.rowCount())])
                # t = f"Offene Leistunge ({ gesamt_brutto:0.2f} € )"
                # self.lb_offene_Leistung.setText(t)
      
      
          def info_oeffnen(self):
             # stl = STL_HRKalender()
              #stl.ausgabefenster()
              cls_About.exec_()
      
          def loaddata11(self):
                  #Verbindung zur sqlite3-Datenbank herstellen und GUI-Tabelle mit Daten füllen
                  con_db=sqlite3.connect("Haushaltsbuch/STL_HR_DB.sdb")
                  #Hier wird die Tabelle "Haushaltsbuch" aufgerufen und es werden nur 3 Datensätze ausgelesen
                  sql_Befehl= "SELECT * FROM Haushaltsbuch LIMIT 130"
                  result = con_db.execute(sql_Befehl)
                  self.tbl_eingabeTabelle.setRowCount(0)
      
                  for row_number,row_data in enumerate(result):
                      self.tbl_eingabeTabelle.insertRow(row_number)
                      for column_number, data in enumerate(row_data):
                          self.tbl_eingabeTabelle.setItem(row_number,column_number,QTableWidgetItem(str(data)))
      
                  con_db.close()
      
          def arbeits_pfad_pruefen(self):
      
              msg = QMessageBox()
              msg.setWindowTitle("Meldung")
              arbeits_ordner1 = os.path.dirname(__file__)
              #msg.setText(arbeits_ordner1)
              #x = msg.exec_()
              arbeits_ordner = os.path.isdir(os.path.join("Haushaltsbuch"))
      
              if  arbeits_ordner:
                 # msg.setText("Der Ordner Haushaltsbuch ist vorhanden!! " )
                  x = msg.exec_()
                  #print (arbeits_ordner)
                  wert = True
                  return wert
              else:
                  msg.setText("""
                  Bitte legen Sie einen Ordner mit dem Namen
                            #Haushaltsbuch#
                  an.
                  Darin wird dann die Sqlite Datenbank gespeichert.
                  Aktueller Pfad ist
                  """)
                  x = msg.exec_()
                  #print (arbeits_ordner)
                 # self.bt_beenden()
                  wert = False
                  return wert
      #db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
      #db.setDatabaseName("STL_HR_DB.sdb")
      #db.setDatabaseName("Haushaltsbuch/STL_HR_DB.sdb")
      
      
      class CLS_About(QDialog,Ui_cls_About):
          def __init__(self, parent=None):
              super().__init__(parent)
              self.setupUi(self)
              self.bt_beenden.clicked.connect(self.beenden)
      
          def beenden(self):
              #Your desired functionality here
              print("Er wurde beenden des unter Fensters gedrückt!!!")
              #import sys
              self.close()
      
      
      
      
      
      
      if __name__ == "__main__":
          app = QApplication(sys.argv)
          widget = MainWindow()
          cls_About = CLS_About()
          widget.show()
          sys.exit(app.exec())
      
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on 20 Sept 2023, 05:31 last edited by jsulm
      #2

      @Califax said in Frage zu qt Python und ausgelagerten Klassen:

      und wie ich die Tabelle damit füllen kann

      Diese andere Klasse sollte nicht auf interne Details deiner MainWindow Klasse zugreifen! Heißt: sie soll nicht die Tabelle selbst füllen. Das wäre sonst schlechtes Design. Was du stattdessen machen solltest: DB_Schnitt Klasse sollte eine Methode anbieten um das Lesen der Daten aus der Datenbank zu triggern. Da das Lesen etwas Zeit in Anspruch nimmt sollte das Ergebnis via Signal an den Aufrufer geschickt werden. Und der Aufrufer kann dann mit den Daten machen was auch immer er will, z.B. eine Tabelle damit befüllen.

      Da du ja offensichtlich mit Datenbanken arbeitest solltest du dir unbedingt https://doc.qt.io/qt-6/model-view-programming.html anschauen.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      C 1 Reply Last reply 20 Sept 2023, 06:23
      1
      • jsulmJ jsulm
        20 Sept 2023, 05:31

        @Califax said in Frage zu qt Python und ausgelagerten Klassen:

        und wie ich die Tabelle damit füllen kann

        Diese andere Klasse sollte nicht auf interne Details deiner MainWindow Klasse zugreifen! Heißt: sie soll nicht die Tabelle selbst füllen. Das wäre sonst schlechtes Design. Was du stattdessen machen solltest: DB_Schnitt Klasse sollte eine Methode anbieten um das Lesen der Daten aus der Datenbank zu triggern. Da das Lesen etwas Zeit in Anspruch nimmt sollte das Ergebnis via Signal an den Aufrufer geschickt werden. Und der Aufrufer kann dann mit den Daten machen was auch immer er will, z.B. eine Tabelle damit befüllen.

        Da du ja offensichtlich mit Datenbanken arbeitest solltest du dir unbedingt https://doc.qt.io/qt-6/model-view-programming.html anschauen.

        C Offline
        C Offline
        Califax
        wrote on 20 Sept 2023, 06:23 last edited by Califax
        #3

        @jsulm
        Danke für die Antwort.
        Ja hast recht ich arbeite mit einer Datenbank (Sqlite3) , die DB ist der Speicher und die Oberfläche die Schnittstelle zum Benutzer (alles schon lange bekanntund von anderen schon umgesetzt).

        ich werde mich mit den Model befassen und hoffe das ich einen Weg finde ,meine Daten über die Tabelle in die DB zu schreiben und aus der DB zu lesen (über eine extra Klasse).
        Gruß Califax

        C 1 Reply Last reply 7 Oct 2023, 15:22
        0
        • C Califax
          20 Sept 2023, 06:23

          @jsulm
          Danke für die Antwort.
          Ja hast recht ich arbeite mit einer Datenbank (Sqlite3) , die DB ist der Speicher und die Oberfläche die Schnittstelle zum Benutzer (alles schon lange bekanntund von anderen schon umgesetzt).

          ich werde mich mit den Model befassen und hoffe das ich einen Weg finde ,meine Daten über die Tabelle in die DB zu schreiben und aus der DB zu lesen (über eine extra Klasse).
          Gruß Califax

          C Offline
          C Offline
          Califax
          wrote on 7 Oct 2023, 15:22 last edited by
          #4

          @Califax
          Hallo
          Ich habe das Thema mit der DB erst einmal hinten angestellt.
          Wenn ich die Lösung habe werde ich es veröffentlichen.

          Ich konzentriere mich ersteinmal auf die Oberfläche und habe ähnliche probleme wie mit der DB.
          Folgendes Problem hier ein Bild zur Veranschaulichung.
          frage_kalender1.png

          Ich klicke auf eine Zelle in der Spalte Datum darauf öffnet sich das Fenster wie im Bild.
          Jetzt drücke ich im Kalender auf ein Tag und dann soll das Datum in der Aktiven Datum/Zelle eingetragen werden und der Kalender soll geschlossen werden.
          Der Kalender schlisst sich wie gewünscht aber das ausgewählte Datum bekomme ich nicht , sonder die Meldung

          Meldung Anfang:

          kal.geb_Datum(self)
          TypeError: cls_STL_HRKalender.geb_Datum() takes 0 positional arguments but 2 were given

          Meldung Ende:

          Hier ist der Code der Kalender Klasse.
          STL_HRKalender.py

          # This Python file uses the following encoding: utf-8
          
          try:
              from PySide6 import  QtCore ,QtWidgets
              qt_widgets = QtWidgets
          except ImportError:
              from PySide6 import QtCore
              #from PySide6 import QtWidgets
              from PySide6 import QtQuick
              from PySide6.QtWidgets import QWidget
          
          
          #class cls_STL_HRKalender(QCalendarWidget):
          class cls_STL_HRKalender(qt_widgets.QWidget):
              #datum="2023-12-24"
              global datum
              school_name = 'ABC School'
             # def __init__(self,title = "Calendar"):
             # def __init__(self,title):
              def __init__(self):
                 # pass
                  super(cls_STL_HRKalender, self).__init__()
          
                  #self.title = title
                  self.title = "Fenster"
                  self.setWindowTitle(self.title)
                  layout = qt_widgets.QGridLayout()
                  layout.setColumnStretch(1, 1)
          
                  self.cal = qt_widgets.QCalendarWidget(self)
                  self.cal.setGridVisible(True)
                  self.cal.clicked[QtCore.QDate].connect(self.show_date)
                  layout.addWidget(self.cal, 0, 0, 1, 2)
          
                  self.date_label = qt_widgets.QLabel()
                  self.date = self.cal.selectedDate()
                  #Hier wird das datum in der Form 2023-12-24 ausgegeben
                  self.date_label.setText(self.date.toString(QtCore.Qt.ISODate))
                  layout.addWidget(self.date_label, 1, 0)
          
                  print("123",self.date.toString(QtCore.Qt.ISODate))
          
                  button_box = qt_widgets.QDialogButtonBox()
                  confirm_button = button_box.addButton(qt_widgets.QDialogButtonBox.Ok)
                  confirm_button.clicked.connect(self.confirm)
                  layout.addWidget(button_box, 1, 1)
          
                  self.setLayout(layout)
                  self.show()
          
                  #self.datum = self.date.toString('dd.MM.yyyy')
          
                  #self.raise_()
          
          
              def show_date(self, date):
                  self.date = self.cal.selectedDate()
                  #Hier wird das datum in der Form 24.12.2023 ausgegeben
                  self.date_label.setText(self.date.toString('dd.MM.yyyy'))
                  self.close()
          
              def confirm(self):
                  self.date = self.cal.selectedDate()
                  self.close()
          
             
              def geb_Datum():
                  datum=self.date.toString(QtCore.Qt.ISODate)
                  print("das Datum aus der Klasse cls_STL_HRKalender: ",datum)
                
          
          

          Hier ist der Code wie ich es Versuche.

           This Python file uses the following encoding: utf-8
          import sys
          import os
          import sqlite3
          
          from db_Schnitt import cls_DB_Schnitt
          from STL_HRKalender import cls_STL_HRKalender
          
          
          
          
          from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem, QVBoxLayout
          from PySide6 import QtSql
          
          # Important:
          # You need to run the following command to generate the ui_form.py file
          #     pyside6-uic form.ui -o ui_form.py, or
          #     pyside2-uic form.ui -o ui_form.py
          from ui_form import Ui_StartFenster
          from ui_About import Ui_cls_About
          
          class MainWindow(QMainWindow,Ui_StartFenster):
              def __init__(self, parent=None):
                  super().__init__(parent)
                  self.ui = Ui_StartFenster()
                  self.ui.setupUi(self)
                  self.setupUi(self)
                  self.menue_Beenden.triggered.connect(self.close)
                  self.menue_Info.triggered.connect(self.info_oeffnen)
                  self.menue_Jahrgang.triggered.connect(self.arbeits_pfad_pruefen)
                 # self.bt_Versuch.clicked.connect(self.Konstrukter_1)
                  #Hier wird die Breite der Spalte 7(0 mitgezählt) auf 400 gestellt
                  self.tbl_eingabeTabelle.setColumnWidth(6,400)
          
          
                  self.mod_offene_Leistungen = QtSql.QSqlRelationalTableModel()
                  self.mod_offene_Leistungen.setTable("Haushaltsbuch")
                  self.mod_offene_Leistungen.setRelation(1,QtSql.QSqlRelation("Haushaltsbuch","id","Zaehler"))
                  self.tbl_eingabeTabelle.setItemDelegate(QtSql.QSqlRelationalDelegate())
                  self.msg = QMessageBox()
                  self.msg.setWindowTitle("Meldung Datei")
                  self.leistungen_anzeigen()
                  #self.table.selectionModel().selectionChanged.connect(self.on_selectionChanged)
                  self.tbl_eingabeTabelle.selectionModel().selectionChanged.connect(self.on_selectionChanged)
          
          
                  schnitt = cls_DB_Schnitt
                  schnitt.ist_db_Datei_vorhanden1(self)
                 # schnitt.ist_db_Datei_vorhanden2(self)
                 # schnitt.arbeits_pfad_pruefen()
                  #schnitt.loaddata1()
                 
                  self.loaddata1()
          
          
          
              def on_selectionChanged(self, selected, deselected):
                  #kal = cls_STL_HRKalender("Kalender")
                  kal = cls_STL_HRKalender()
                  for ix in selected.indexes():
                      row = ix.row()
                      column = ix.column()
                      print("Test row:" , row ,column)
                     
                      kal.geb_Datum(self)
                    
          
          

          Kann mir bitte einer erklären wie ich an das Datum komme.

          Gruß Califax

          Pl45m4P 1 Reply Last reply 9 Oct 2023, 02:39
          0
          • C Califax
            7 Oct 2023, 15:22

            @Califax
            Hallo
            Ich habe das Thema mit der DB erst einmal hinten angestellt.
            Wenn ich die Lösung habe werde ich es veröffentlichen.

            Ich konzentriere mich ersteinmal auf die Oberfläche und habe ähnliche probleme wie mit der DB.
            Folgendes Problem hier ein Bild zur Veranschaulichung.
            frage_kalender1.png

            Ich klicke auf eine Zelle in der Spalte Datum darauf öffnet sich das Fenster wie im Bild.
            Jetzt drücke ich im Kalender auf ein Tag und dann soll das Datum in der Aktiven Datum/Zelle eingetragen werden und der Kalender soll geschlossen werden.
            Der Kalender schlisst sich wie gewünscht aber das ausgewählte Datum bekomme ich nicht , sonder die Meldung

            Meldung Anfang:

            kal.geb_Datum(self)
            TypeError: cls_STL_HRKalender.geb_Datum() takes 0 positional arguments but 2 were given

            Meldung Ende:

            Hier ist der Code der Kalender Klasse.
            STL_HRKalender.py

            # This Python file uses the following encoding: utf-8
            
            try:
                from PySide6 import  QtCore ,QtWidgets
                qt_widgets = QtWidgets
            except ImportError:
                from PySide6 import QtCore
                #from PySide6 import QtWidgets
                from PySide6 import QtQuick
                from PySide6.QtWidgets import QWidget
            
            
            #class cls_STL_HRKalender(QCalendarWidget):
            class cls_STL_HRKalender(qt_widgets.QWidget):
                #datum="2023-12-24"
                global datum
                school_name = 'ABC School'
               # def __init__(self,title = "Calendar"):
               # def __init__(self,title):
                def __init__(self):
                   # pass
                    super(cls_STL_HRKalender, self).__init__()
            
                    #self.title = title
                    self.title = "Fenster"
                    self.setWindowTitle(self.title)
                    layout = qt_widgets.QGridLayout()
                    layout.setColumnStretch(1, 1)
            
                    self.cal = qt_widgets.QCalendarWidget(self)
                    self.cal.setGridVisible(True)
                    self.cal.clicked[QtCore.QDate].connect(self.show_date)
                    layout.addWidget(self.cal, 0, 0, 1, 2)
            
                    self.date_label = qt_widgets.QLabel()
                    self.date = self.cal.selectedDate()
                    #Hier wird das datum in der Form 2023-12-24 ausgegeben
                    self.date_label.setText(self.date.toString(QtCore.Qt.ISODate))
                    layout.addWidget(self.date_label, 1, 0)
            
                    print("123",self.date.toString(QtCore.Qt.ISODate))
            
                    button_box = qt_widgets.QDialogButtonBox()
                    confirm_button = button_box.addButton(qt_widgets.QDialogButtonBox.Ok)
                    confirm_button.clicked.connect(self.confirm)
                    layout.addWidget(button_box, 1, 1)
            
                    self.setLayout(layout)
                    self.show()
            
                    #self.datum = self.date.toString('dd.MM.yyyy')
            
                    #self.raise_()
            
            
                def show_date(self, date):
                    self.date = self.cal.selectedDate()
                    #Hier wird das datum in der Form 24.12.2023 ausgegeben
                    self.date_label.setText(self.date.toString('dd.MM.yyyy'))
                    self.close()
            
                def confirm(self):
                    self.date = self.cal.selectedDate()
                    self.close()
            
               
                def geb_Datum():
                    datum=self.date.toString(QtCore.Qt.ISODate)
                    print("das Datum aus der Klasse cls_STL_HRKalender: ",datum)
                  
            
            

            Hier ist der Code wie ich es Versuche.

             This Python file uses the following encoding: utf-8
            import sys
            import os
            import sqlite3
            
            from db_Schnitt import cls_DB_Schnitt
            from STL_HRKalender import cls_STL_HRKalender
            
            
            
            
            from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QTableWidgetItem, QVBoxLayout
            from PySide6 import QtSql
            
            # Important:
            # You need to run the following command to generate the ui_form.py file
            #     pyside6-uic form.ui -o ui_form.py, or
            #     pyside2-uic form.ui -o ui_form.py
            from ui_form import Ui_StartFenster
            from ui_About import Ui_cls_About
            
            class MainWindow(QMainWindow,Ui_StartFenster):
                def __init__(self, parent=None):
                    super().__init__(parent)
                    self.ui = Ui_StartFenster()
                    self.ui.setupUi(self)
                    self.setupUi(self)
                    self.menue_Beenden.triggered.connect(self.close)
                    self.menue_Info.triggered.connect(self.info_oeffnen)
                    self.menue_Jahrgang.triggered.connect(self.arbeits_pfad_pruefen)
                   # self.bt_Versuch.clicked.connect(self.Konstrukter_1)
                    #Hier wird die Breite der Spalte 7(0 mitgezählt) auf 400 gestellt
                    self.tbl_eingabeTabelle.setColumnWidth(6,400)
            
            
                    self.mod_offene_Leistungen = QtSql.QSqlRelationalTableModel()
                    self.mod_offene_Leistungen.setTable("Haushaltsbuch")
                    self.mod_offene_Leistungen.setRelation(1,QtSql.QSqlRelation("Haushaltsbuch","id","Zaehler"))
                    self.tbl_eingabeTabelle.setItemDelegate(QtSql.QSqlRelationalDelegate())
                    self.msg = QMessageBox()
                    self.msg.setWindowTitle("Meldung Datei")
                    self.leistungen_anzeigen()
                    #self.table.selectionModel().selectionChanged.connect(self.on_selectionChanged)
                    self.tbl_eingabeTabelle.selectionModel().selectionChanged.connect(self.on_selectionChanged)
            
            
                    schnitt = cls_DB_Schnitt
                    schnitt.ist_db_Datei_vorhanden1(self)
                   # schnitt.ist_db_Datei_vorhanden2(self)
                   # schnitt.arbeits_pfad_pruefen()
                    #schnitt.loaddata1()
                   
                    self.loaddata1()
            
            
            
                def on_selectionChanged(self, selected, deselected):
                    #kal = cls_STL_HRKalender("Kalender")
                    kal = cls_STL_HRKalender()
                    for ix in selected.indexes():
                        row = ix.row()
                        column = ix.column()
                        print("Test row:" , row ,column)
                       
                        kal.geb_Datum(self)
                      
            
            

            Kann mir bitte einer erklären wie ich an das Datum komme.

            Gruß Califax

            Pl45m4P Offline
            Pl45m4P Offline
            Pl45m4
            wrote on 9 Oct 2023, 02:39 last edited by Pl45m4 10 Sept 2023, 02:40
            #5

            @Califax said in Frage zu qt Python und ausgelagerten Klassen:

            TypeError: cls_STL_HRKalender.geb_Datum() takes 0 positional arguments but 2 were given

            Guck dir bitte an wie geb_Datum() definiert ist,

            def geb_Datum():

            was in der Funktion passieren soll

            datum=self.date.toString(QtCore.Qt.ISODate)
            print("das Datum aus der Klasse cls_STL_HRKalender: ",datum)

            und wie du sie benutzt

            kal.geb_Datum(self)

            Das sind Basics in Python und wie man mit Python-Klassen umgeht :)


            If debugging is the process of removing software bugs, then programming must be the process of putting them in.

            ~E. W. Dijkstra

            1 Reply Last reply
            1
            • C Offline
              C Offline
              Califax
              wrote on 15 Oct 2023, 15:32 last edited by
              #6

              Hallo
              Jetzt hab ich mich einige Zeit mit dem Thema auseinander gesetzt und habe glaube eine Lösung gefunden.

              Als erstes hab ich die Problemstellung aufgeteilt.
              Ich habe mir erst das Thema Kalender und Hauptfenster ausgelagert.
              Und damit das Thema mit dem auslagern von Klassen glaube gelöst.
              Ich stelle hier das Projekt als ZIP Datei zur Verfügung., damit ihr den Code nachvollziehen und mir noch ein Paar Tips geben könnt um den Code zu optimieren.

              Hier noch ein Bild
              test.png

              Datei: form.ui

              <?xml version="1.0" encoding="UTF-8"?>
              <ui version="4.0">
               <class>MainWindow</class>
               <widget class="QMainWindow" name="MainWindow">
                <property name="geometry">
                 <rect>
                  <x>0</x>
                  <y>0</y>
                  <width>800</width>
                  <height>600</height>
                 </rect>
                </property>
                <property name="windowTitle">
                 <string>MainWindow</string>
                </property>
                <widget class="QWidget" name="centralwidget">
                 <widget class="QPushButton" name="bt_Kalender">
                  <property name="geometry">
                   <rect>
                    <x>450</x>
                    <y>120</y>
                    <width>231</width>
                    <height>121</height>
                   </rect>
                  </property>
                  <property name="text">
                   <string>drück mich</string>
                  </property>
                 </widget>
                 <widget class="QLabel" name="label">
                  <property name="geometry">
                   <rect>
                    <x>460</x>
                    <y>340</y>
                    <width>221</width>
                    <height>51</height>
                   </rect>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>15</pointsize>
                   </font>
                  </property>
                  <property name="text">
                   <string>Datum ausgabe:</string>
                  </property>
                 </widget>
                 <widget class="QLabel" name="label_2">
                  <property name="geometry">
                   <rect>
                    <x>50</x>
                    <y>150</y>
                    <width>281</width>
                    <height>51</height>
                   </rect>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>15</pointsize>
                   </font>
                  </property>
                  <property name="text">
                   <string>Kalender öffnen mit Button</string>
                  </property>
                 </widget>
                 <widget class="QLabel" name="label_3">
                  <property name="geometry">
                   <rect>
                    <x>60</x>
                    <y>410</y>
                    <width>401</width>
                    <height>51</height>
                   </rect>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>15</pointsize>
                   </font>
                  </property>
                  <property name="text">
                   <string>Kalender öffnen durch Click auf Textfeld</string>
                  </property>
                 </widget>
                 <widget class="QTextEdit" name="td_Datumtext">
                  <property name="geometry">
                   <rect>
                    <x>460</x>
                    <y>410</y>
                    <width>221</width>
                    <height>51</height>
                   </rect>
                  </property>
                  <property name="sizePolicy">
                   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="minimumSize">
                   <size>
                    <width>0</width>
                    <height>0</height>
                   </size>
                  </property>
                  <property name="maximumSize">
                   <size>
                    <width>16777215</width>
                    <height>16777215</height>
                   </size>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>20</pointsize>
                   </font>
                  </property>
                 </widget>
                 <widget class="QLabel" name="label_4">
                  <property name="geometry">
                   <rect>
                    <x>20</x>
                    <y>10</y>
                    <width>701</width>
                    <height>51</height>
                   </rect>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>15</pointsize>
                   </font>
                  </property>
                  <property name="text">
                   <string>Hier wird das Datum aus dem Textfeld in den Kalender gegeben und zurück</string>
                  </property>
                 </widget>
                </widget>
                <widget class="QMenuBar" name="menubar">
                 <property name="geometry">
                  <rect>
                   <x>0</x>
                   <y>0</y>
                   <width>800</width>
                   <height>23</height>
                  </rect>
                 </property>
                </widget>
                <widget class="QStatusBar" name="statusbar"/>
               </widget>
               <resources/>
               <connections/>
              </ui>
              
              

              Datei: mainwindow.py

              # This Python file uses the following encoding: utf-8
              import sys
              
              from PySide6.QtWidgets import QApplication, QMainWindow
              
              # Important:
              # You need to run the following command to generate the ui_form.py file
              #     pyside6-uic form.ui -o ui_form.py, or
              #     pyside2-uic form.ui -o ui_form.py
              from ui_form import Ui_MainWindow
              from STL_HRKalender_2 import cls_STL_HRKalender_2
              
              from PySide6.QtCore import (
                   QDateTime,
              )
              
              class MainWindow(QMainWindow):
                  # kann gelöscht werden
                  Aufrufe = 0
              
                  def __init__(self, parent=None):
                      super().__init__(parent)
              
                      self.ui = Ui_MainWindow()
                      self.ui.setupUi(self)
                      self.aktuelles_Datum= QDateTime.currentDateTime()
                      self.fenster = None
              
                      #Hier wird das Textfeld mit einem datum gefüllt
                      self.ui.td_Datumtext.setText("11.12.2023")
                      print(self.ui.td_Datumtext.selectAll())
                     # self.kal_2 = self.findChild(cls_STL_HRKalender_2,"Kalender")
                      self.ui.td_Datumtext.selectionChanged.connect(self.oeffne_Kalender)
              
                      self.ui.bt_Kalender.clicked.connect(self.oeffne_Kalender)
              
                  def oeffne_Kalender(self):
                      if self.fenster is None:
                          MainWindow.Aufrufe += 1
                          print ('Es wird oeffne_Kalender ',MainWindow.Aufrufe,' aufgerufe.')
                          #Hier holt man das Datum aus dem Textfeld
                          zellenDatum = self.ui.td_Datumtext.toPlainText()
                          print("Inhalt vom Textfeld:",zellenDatum)
                          #Hier wird das Datum an den Kalender übergeben
                          kal2 = cls_STL_HRKalender_2(self,zellenDatum)
                          self.fenster= kal2
                          kal2.showCalendar(0)
              
                          # Hier wird das Datum aus dem Kalender geholt und in das Textfeld geschrieben
                          self.text = kal2.datum
                          print ("oeffne_Kalender:",type(self.text))
                          self.ui.td_Datumtext.setText(self.text)
              
                      else:
                          self.fenster = None
              
              if __name__ == "__main__":
                  app = QApplication(sys.argv)
                  widget = MainWindow()
                  widget.show()
                  sys.exit(app.exec())
              

              Datei: STL_HRKalender_2.py

              # This Python file uses the following encoding: utf-8
              from PySide6 import QtCore
              #from PySide6 import QtWidgets
              from PySide6.QtCore import QDate
              from PySide6.QtWidgets import QCalendarWidget ,QDialog ,QVBoxLayout
              #from PySide6 import Qt
              
              
              #class cls_STL_HRKalender_2(QtWidgets.QWidget):
              class cls_STL_HRKalender_2(QCalendarWidget):
                 # def __init__(self):
                  #    pass
                  ## kann gelöscht werden
                  Aufrufe = 0
                  def __init__(self, parent,text_Datum):
                      super().__init__(parent)
                      self.setStyleSheet('font-size: 20px')
                      # über die Variable kann ich das Ausgewählte Datum erhalten
                      print("cls_STL_HRKalender_2:",text_Datum)
              
                      #Hier wird der String "text_Datum" in das date format konvertiert
                      self.date = QtCore.QDate.fromString(text_Datum, "dd.MM.yyyy")
                      print("date2",self.date)
              
              
              
                  def showCalendar(self, row):
                      ## kann gelöscht werden
                      cls_STL_HRKalender_2.Aufrufe += 1
                      ## kann gelöscht werden
                      print ('Die Methode showCalendar wird ',cls_STL_HRKalender_2.Aufrufe,' aufgerufen.')
                      print("showCalendar:")
                      self.dialog = QDialog()
                      self.dialog.setWindowTitle("Kalender")
                      self.dialog.setWindowFlags(QtCore.Qt.WindowCloseButtonHint )
              
              
                      vbox1 = QVBoxLayout()
              
                      self.cal = QCalendarWidget()
                      self.cal.setGridVisible(True)
              
              
              
                      self.cal.setSelectedDate(self.date)
              
              
                      # single click
                      self.cal.clicked.connect(self.drueken_und_Datum_geben)
                     # self.cal.
                      vbox1.addWidget(self.cal)
                      self.dialog.setLayout(vbox1)
                      self.dialog.exec()
              
              
                  def drueken_und_Datum_geben(self):
                      self.date = self.cal.selectedDate()
                      #Hier wird das datum in der Form 24.12.2023 ausgegeben
                      self.datum = self.date.toString('dd.MM.yyyy')
                      print("drueken_und_Datum_geben",self.datum)
                      self.dialog.close()
              
              
              
                  def setze_Datum(slef):
                      print("IIII")
              
                  def setCalendarDate(self, date):
                      markiertes_Datum = self.cal.setSelectedDate(QDate(date[0], date[1], date[2]))
                      date_in_string = str(markiertes_Datum.__str__)
                      print ("setCalendarDate ",date_in_string)
              
                  def __del__(self):
                      print ("__del__(self): Methode")
              

              Da ich keine Möglichkeit gefunden habe eine Zip datei hochzulade muss es so gehen.

              Gruß Califax

              1 Reply Last reply
              0
              • C Offline
                C Offline
                Califax
                wrote on 27 Oct 2023, 14:38 last edited by
                #7

                Hallo

                Nun hab ich alles noch einmal überarbeitet und meiner Meinung nach eine sauber Version geschrieben mit der man arbeiten kann.

                Hier ist der vollständige Code zum nachmachen.

                form.ui

                <?xml version="1.0" encoding="UTF-8"?>
                <ui version="4.0">
                 <class>MainWindow</class>
                 <widget class="QMainWindow" name="MainWindow">
                  <property name="geometry">
                   <rect>
                    <x>0</x>
                    <y>0</y>
                    <width>721</width>
                    <height>600</height>
                   </rect>
                  </property>
                  <property name="font">
                   <font>
                    <pointsize>20</pointsize>
                   </font>
                  </property>
                  <property name="windowTitle">
                   <string>MainWindow</string>
                  </property>
                  <widget class="QWidget" name="centralwidget">
                   <widget class="QPushButton" name="btn_meine">
                    <property name="geometry">
                     <rect>
                      <x>180</x>
                      <y>220</y>
                      <width>261</width>
                      <height>201</height>
                     </rect>
                    </property>
                    <property name="text">
                     <string>bitte drücken</string>
                    </property>
                   </widget>
                   <widget class="QTextEdit" name="td_Datumtext">
                    <property name="geometry">
                     <rect>
                      <x>160</x>
                      <y>70</y>
                      <width>301</width>
                      <height>70</height>
                     </rect>
                    </property>
                    <property name="palette">
                     <palette>
                      <active>
                       <colorrole role="WindowText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Button">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Light">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Midlight">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Dark">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>127</red>
                          <green>127</green>
                          <blue>127</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Mid">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>170</red>
                          <green>170</green>
                          <blue>170</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Text">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="BrightText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ButtonText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Base">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Window">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Shadow">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="AlternateBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>220</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="PlaceholderText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="127">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                      </active>
                      <inactive>
                       <colorrole role="WindowText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Button">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>239</red>
                          <green>239</green>
                          <blue>239</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Light">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Midlight">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>202</red>
                          <green>202</green>
                          <blue>202</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Dark">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>159</red>
                          <green>159</green>
                          <blue>159</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Mid">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>184</red>
                          <green>184</green>
                          <blue>184</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Text">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="BrightText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ButtonText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Base">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Window">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>239</red>
                          <green>239</green>
                          <blue>239</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Shadow">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>118</red>
                          <green>118</green>
                          <blue>118</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="AlternateBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>247</red>
                          <green>247</green>
                          <blue>247</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>220</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="PlaceholderText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="128">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                      </inactive>
                      <disabled>
                       <colorrole role="WindowText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>127</red>
                          <green>127</green>
                          <blue>127</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Button">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Light">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Midlight">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Dark">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>127</red>
                          <green>127</green>
                          <blue>127</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Mid">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>170</red>
                          <green>170</green>
                          <blue>170</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Text">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>127</red>
                          <green>127</green>
                          <blue>127</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="BrightText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ButtonText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>127</red>
                          <green>127</green>
                          <blue>127</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Base">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Window">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>255</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="Shadow">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>177</red>
                          <green>177</green>
                          <blue>177</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="AlternateBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>247</red>
                          <green>247</green>
                          <blue>247</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipBase">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>255</red>
                          <green>255</green>
                          <blue>220</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="ToolTipText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="255">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                       <colorrole role="PlaceholderText">
                        <brush brushstyle="SolidPattern">
                         <color alpha="128">
                          <red>0</red>
                          <green>0</green>
                          <blue>0</blue>
                         </color>
                        </brush>
                       </colorrole>
                      </disabled>
                     </palette>
                    </property>
                    <property name="autoFillBackground">
                     <bool>false</bool>
                    </property>
                    <property name="inputMethodHints">
                     <set>Qt::ImhDate|Qt::ImhMultiLine</set>
                    </property>
                    <property name="frameShape">
                     <enum>QFrame::StyledPanel</enum>
                    </property>
                    <property name="html">
                     <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
                &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
                p, li { white-space: pre-wrap; }
                hr { height: 1px; border-width: 0; }
                li.unchecked::marker { content: &quot;\2610&quot;; }
                li.checked::marker { content: &quot;\2612&quot;; }
                &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Cantarell'; font-size:20pt; font-weight:400; font-style:normal;&quot;&gt;
                &lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Center&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                    </property>
                   </widget>
                   <widget class="QLabel" name="label">
                    <property name="geometry">
                     <rect>
                      <x>40</x>
                      <y>10</y>
                      <width>581</width>
                      <height>41</height>
                     </rect>
                    </property>
                    <property name="text">
                     <string>bitte auf das Textfeld clicken</string>
                    </property>
                    <property name="alignment">
                     <set>Qt::AlignCenter</set>
                    </property>
                   </widget>
                   <widget class="QPushButton" name="btn_beenden">
                    <property name="geometry">
                     <rect>
                      <x>500</x>
                      <y>450</y>
                      <width>181</width>
                      <height>41</height>
                     </rect>
                    </property>
                    <property name="text">
                     <string>beenden</string>
                    </property>
                   </widget>
                  </widget>
                  <widget class="QMenuBar" name="menubar">
                   <property name="geometry">
                    <rect>
                     <x>0</x>
                     <y>0</y>
                     <width>721</width>
                     <height>49</height>
                    </rect>
                   </property>
                  </widget>
                  <widget class="QStatusBar" name="statusbar"/>
                 </widget>
                 <resources/>
                 <connections/>
                </ui>
                

                EigenerDialog.py

                # This Python file uses the following encoding: utf-8
                from PySide6.QtWidgets import(
                    #QMainWindow,
                    #QApplication,
                    #QDialogButtonBox,
                    QCalendarWidget ,
                    QDialog ,
                    #QLabel,
                    QVBoxLayout
                    )
                
                from PySide6 import (
                    # QtWidgets,
                    QtCore
                    )
                
                class EigenerDialog(QDialog):
                    def __init__(self,ex_str_Datum):
                        super().__init__()
                        self.__cls_text_Datum = ex_str_Datum
                        self.date=None
                        self.datum=None
                
                        self.row=0
                        #print ('Methode __init__ ')
                        self.setWindowTitle("Kalender")
                        self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint )
                
                        self.vbox1 = QVBoxLayout()
                
                        self.cal = QCalendarWidget()
                        self.cal.setGridVisible(True)
                
                        self.setLayout(self.vbox1)
                        self.set_Datum()
                        self.iniUI()
                        self.oeffnen()
                
                
                    def iniUI(self):
                        #print ('Methode iniUI ')
                        #Kalender in das Dialogfenster einfügen
                        self.vbox1.addWidget(self.cal)
                        #Der Tag wird aus dem Hauptfenster geholt und der Tag wird im Kalender focusiert
                        self.cal.setSelectedDate(self.date)
                        # single click
                        self.cal.clicked.connect(self.geb_Datum)
                
                
                    def oeffnen (self):
                        self.exec()
                
                    def geb_Datum(self):
                        #print ('Methode geb_Datum ')
                        self.date = self.cal.selectedDate()
                        #Hier wird das datum in der Form 24.12.2023 ausgegeben
                        self.datum = self.date.toString('dd.MM.yyyy')
                        #print ('Methode geb_Datum2 ',self.datum)
                        self.beenden()
                
                
                    def set_Datum(self):
                        print ('Methode set_Datum ')
                
                        #Hier wird der String "text_Datum" in das date format konvertiert
                        self.date = QtCore.QDate.fromString(self.__cls_text_Datum, "dd.MM.yyyy")
                
                
                    def beenden(self):
                        print("Sie Klicken auf beenden")
                        self.close()
                

                mainwindow.py

                # This Python file uses the following encoding: utf-8
                import sys
                
                #from PySide6.QtWidgets import QApplication, QMainWindow
                #from PySide6 import Qt
                from PySide6.QtWidgets import(
                     QMainWindow,
                     QApplication,
                     #QDialogButtonBox,
                     #QCalendarWidget ,
                     #QDialog ,
                     #QLabel,
                     #QVBoxLayout
                     )
                from PySide6.QtCore import (
                     QDateTime,
                     Qt
                     )
                
                from EigenerDialog import EigenerDialog
                
                # Important:
                # You need to run the following command to generate the ui_form.py file
                #     pyside6-uic form.ui -o ui_form.py, or
                #     pyside2-uic form.ui -o ui_form.py
                from ui_form import Ui_MainWindow
                
                
                
                
                class MainWindow(QMainWindow):
                    def __init__(self, parent=None):
                        super().__init__(parent)
                
                        self.ui = Ui_MainWindow()
                        self.ui.setupUi(self)
                        self.aktuelles_Datum = QDateTime.currentDateTime()
                        self.fenster = None
                
                
                        #Hier wird das Textfeld mit einem datum gefüllt
                        #Hier wird das aktuelles_Datum in der Form 24.12.2023 ausgegeben
                        self.ui.td_Datumtext.setText(self.aktuelles_Datum.toString('dd.MM.yyyy'))
                        self.ui.td_Datumtext.setAlignment(Qt.AlignCenter)
                        self.ui.btn_beenden.clicked.connect(self.close)
                
                
                
                        self.ui.btn_meine.clicked.connect(self.oeffne_Kalender)
                        self.ui.td_Datumtext.selectionChanged.connect(self.oeffne_Kalender)
                
                
                    def oeffne_Kalender(self):
                        zellenDatum = self.ui.td_Datumtext.toPlainText()
                        self.kal5 = EigenerDialog(zellenDatum)
                        if not self.kal5.datum is None:
                           self.text = self.kal5.datum
                        else:
                            self.text = zellenDatum
                
                        self.ui.td_Datumtext.setText(self.text)
                        self.ui.td_Datumtext.setAlignment(Qt.AlignCenter)
                
                
                
                
                
                if __name__ == "__main__":
                    app = QApplication(sys.argv)
                    widget = MainWindow()
                    widget.show()
                    sys.exit(app.exec())
                
                

                Ich betrachte den fall als gelöst.

                Gruß Califax

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved