Frage zu qt Python und ausgelagerten Klassen
-
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()
# 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())
-
@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.
-
@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 -
@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.
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 MeldungMeldung Anfang:
kal.geb_Datum(self)
TypeError: cls_STL_HRKalender.geb_Datum() takes 0 positional arguments but 2 were givenMeldung 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
-
@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 :)
-
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
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
-
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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } </style></head><body style=" font-family:'Cantarell'; font-size:20pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Center</p></body></html></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>
# 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()
# 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