Wenn ich dieses Programm aus einem anderen Programm aufrufe, funktioniert es.
Ich bin ratlos
Code: Alles auswählen
import sys
import platform
import PyQt6.QtWidgets as qw
import PyQt6.QtSql as qs
import PyQt6.QtCore as qc
from PyQt6 import uic
import artikelart
__version__ = "1.0.0"
class Fenster(qw.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Artikel")
self.ui=uic.loadUi("Artikelstamm.ui", self)
self.isModal()
self.datenbank()
self.modell()
self.tabelle()
self.zeileneu.clicked.connect(self.neuezeile)
self.zeileloesch.clicked.connect(self.loeschen)
self.teileart.clicked.connect(lambda:self.artikelartdialog("Teileart"))
self.materialart.clicked.connect(lambda:self.artikelartdialog("Materialart"))
self.materialform.clicked.connect(lambda:self.artikelartdialog("Materialform"))
self.action_information.triggered.connect(self.helpAbout)
self.beenden.clicked.connect(self.close)
def datenbank(self):
self.db = qs.QSqlDatabase.addDatabase('QSQLITE', "con1")
self.db.setDatabaseName("Stücklisten.db")
self.db.database("con1")
if not self.db.open():
error = self.db.lastError().text()
qw.QMessageBox.critical(None, 'Datenbakverbindungsfehler',
'Kann die Datenbank nicht öffnen: '
f'{error}')
sys.exit(1)
required_tables = {'Teileart','Teilestamm','Materialart'}
missing_tables = required_tables - set(self.db.tables())
if missing_tables:
qw.QMessageBox.critical(
None, 'DB Fehler',
'Tabellen fehlen, bitte reparieren Sie die DB: '
f'{missing_tables}')
sys.exit(1)
def modell(self):
self.model=qs.QSqlRelationalTableModel()
self.model.setTable("Teilestamm")
self.model.setRelation(2, qs.QSqlRelation('Teileart', 'Id', 'Teileartbezeichnung'))
self.model.setRelation(3, qs.QSqlRelation('Materialart', 'Id', 'Materialbezeichnung'))
self.model.setRelation(4, qs.QSqlRelation('Materialform', 'Id', 'Materialform'))
self.model.select()
def tabelle(self):
self.tableView.setModel(self.model)
self.tableView.setItemDelegate(qs.QSqlRelationalDelegate(self.tableView))
stylesheet = "QHeaderView::section {Background-color:rgb(235,235,235);color:rgb(0,0,0); font: 15px}"
self.tableView.setStyleSheet(stylesheet)
self.tableView.setSortingEnabled(True)
self.tableView.resizeColumnsToContents()
self.tableView.verticalHeader().hide()
# Sortieren nach Artikelnummer
self.tableView.sortByColumn(0,qc.Qt.SortOrder.AscendingOrder)
self.label=qw.QLabel()
self.statusBar.addWidget(self.label)
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def neuezeile(self):
self.model.insertRow(self.tableView.currentIndex().row())
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def loeschen(self):
teilebezeichnung = self.model.record(self.tableView.currentIndex().row()).value(1)
msg = qw.QMessageBox.warning(self, "Sicherheitsabfrage",
"Soll der Teilestamm " + teilebezeichnung + " wirklich geloescht werden?", qw.QMessageBox.StandardButton.Yes |
qw.QMessageBox.StandardButton.No)
if msg == qw.QMessageBox.StandardButton.Yes:
self.model.removeRow(self.tableView.currentIndex().row())
self.model.select()
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def artikelartdialog(self, tabel):
artikel = artikelart.Fenster(tabel)
artikel.exec()
def helpAbout(self):
qw.QMessageBox.about(self, "Über Artikelstamm",
"""<b>Artikelstamm</b> v %s
<p>Copyright © 08.06.202 muster.
All rights reserved.
<p>Dies ist eine einfache
Artikelstamm, Stücklistenverwaltung
<p>Python %s - Qt %s - PyQt %s on %s""" % (
__version__, platform.python_version(),
qc.QT_VERSION_STR, qc.PYQT_VERSION_STR, platform.system()))
if __name__ == '__main__':
app = qw.QApplication(sys.argv)
fenster=Fenster()
fenster.showMaximized()
app.exec()