Frage zu Konstruktorargumenten von Pythonklassen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

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_()
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

Ich bin mir sicher, dass die Antwort in der Fehlermeldung liegt.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten