Seite 1 von 1

Frage zu Konstruktorargumenten von Pythonklassen

Verfasst: Freitag 17. Dezember 2021, 11:21
von AFX
Ich habe vor, einer ScrollMessageBox-Klasse folgende Argumente zu übergeben: ScrollMessageBox(QMessageBox.Information, title, date, "", ""')

Es kommt aber ein Fehler, der verschwindet, wenn ich die beiden letzten Leerststrings wegmache, also wenn ich es so aufrufe: ScrollMessageBox(QMessageBox.Information, title, date)

Wieso ist dem so? ich dachte, mit *args kann ich eine beliebige Anzahl n an Argumenten übergeben.

Code: Alles auswählen

class ScrollMessageBox(QMessageBox):
    
    def btnstate(self,b,date):
        name = b.objectName()
       
        date = date.split("_")[0]
       
        if b.isChecked():
           dbaccess.insertIntoCresWith(name, date)

        if not b.isChecked():
           dbaccess.deleteFromCresWith(name, date)

    
    def __init__(self, *args, **kwargs):
      QMessageBox.__init__(self, *args, **kwargs)
      
      scroll = QScrollArea(self)
      scroll.setWidgetResizable(True)
      self.content = QWidget()
      scroll.setWidget(self.content)
      scroll.setMinimumSize (400,200)
      lay = QVBoxLayout(self.content)
      
      d = args[1].split("_")[0]
      
      description = args[1].split("_")[1]
      lay.addWidget(QLabel(description)) 
      
      uncheckedResContacts = dbaccess.getUncheckedResContactsFor(d)
      checkedResContacts = dbaccess.getCheckedResContactsFor(d)
      
      self.chckBoxes = {}
      
      for d, nme in checkedResContacts.items():
          cb = QCheckBox("Check to connect " + d) 
          cb.setChecked(True)
          cb.setObjectName(d)
          cb.stateChanged.connect(partial(self.btnstate, cb, nme))   
          self.chckBoxes[d] = True
          lay.addWidget(cb)

      for entry in checkedResContacts:
          if entry in uncheckedResContacts:
              uncheckedResContacts.pop(entry)

      for d, nme in uncheckedResContacts.items():
          cb = QCheckBox("Check to connect " + d)
          cb.setChecked(False)
          cb.setObjectName(d)
          cb.stateChanged.connect(partial(self.btnstate, cb, args[1])) 
          self.chckBoxes[d] = False
          lay.addWidget(cb)
                    
      cbfilter = QTextEdit()
      cbfilter.setStyleSheet("background-color: yellow; height: 10px; max-width: 22em;");
      cbfilter.setPlaceholderText("Xyz")
      lay.addWidget(cbfilter)
      
      self.layout().addWidget(scroll, 0, 0, 1, self.layout().columnCount())
      self.exec_()

Re: Frage zu Konstruktorargumenten von Pythonklassen

Verfasst: Freitag 17. Dezember 2021, 12:05
von sparrow
Ich bin mir sicher, dass die Antwort in der Fehlermeldung liegt.

Re: Frage zu Konstruktorargumenten von Pythonklassen

Verfasst: Freitag 17. Dezember 2021, 12:32
von Sirius3
@AFX: in den anderen Threads hast Du gesagt, dass Du die Tipps umsetzt. Jetzt sehe ich hier wieder seltsame Variablennamen, wo Vokale fehlen, nme? Gehts noch? lay? Und dann so einbuchstabige Namen wie d oder b die absolut nichts sagen.
Das exec ist auch noch drin.
Es gibt sowas wie `else`, das man gerne nutzen darf.