List Checkbox und Signale

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

Hi ich steh mal wieder vor einem Problem :K

Ich erstelle Anhand einer DB Abfrage verschieden viele Lineedits und Checkboxen die Checkboxen werden mittels einer List erzeugt
so jetzt möche ich allerdings das sich in den Lineedits der Text ändert wenn eine Checkbox angeklickt wird.
Alles schön und gut wenn ich die Checkboxen per Hand erstellen würde das ich sie ja dynamisch erstelle und Sie in einer List sind weiss ich jetzt nicht ganz welche Checkbox angeklickt wird um ein Signal auszufürhen. Ich muss aber wissen welche angeklickt wird damit ich auch das bestimmte Lineedit verändern kann.

Hier mal mein Code

Code: Alles auswählen

import sys
from PySide.QtCore import *
from PySide.QtGui import *
import sqlite3
from functools import partial

class has_tab(QWidget):

    def __init__(self, sprachopt):
        super(has_tab, self).__init__()
        
        self.dbreturn = [(1, 'testtest', 370.0), (2, 'testtest22', 100.0), (3, 'testtest333', 1220.0)]  
        mainlayout = QVBoxLayout()
        self.getOptionen()
        mainlayout.addWidget(self.horizontalGroupBox)
        self.setLayout(mainlayout)


            
    def getOptionen(self):
        self.horizontalGroupBox = QGroupBox("Optionen")
        self.layout = QGridLayout()
        self.scrollarea = QScrollArea()       
        self.cbox =  []
        self.text_lineedit = []
        self.preise_lineedit = []
        
        self.scrollarea.setWidgetResizable(True)

        dbdata = self.dbreturn

        i=0
        for row in dbdata:
            self.text_lineedit.append(QLineEdit(str(dbdata[i][1]), self))    
            self.text_lineedit[i].setReadOnly(True)  
            self.preise_lineedit.append(QLineEdit(str(dbdata[i][2]), self))
            self.preise_lineedit[i].setReadOnly(True)
            self.preise_lineedit[i].setAlignment(Qt.AlignRight)
            self.cbox.append(QCheckBox(self))
            self.cbox[i].stateChanged.connect(partial(self.test, 1111))
            self.layout.addWidget(self.text_lineedit[i],i,0)
            self.layout.addWidget(self.preise_lineedit[i],i,1)
            self.layout.addWidget(self.cbox[i],i,2)
            self.layout.setRowMinimumHeight(i,20)
            self.layout.setRowStretch(i,1)
            self.layout.setColumnMinimumWidth(0,600)
            self.layout.setColumnStretch(0,1)

            i=i+1
            if i == 10:
                break
        self.horizontalGroupBox.setLayout(self.layout)

    def test(self, tester, tester2):
        # Funktion die ausgeführt werden soll 
        print tester
        print tester2
        print self.preise_lineedit[0].text()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window=has_tab(1)
    window.show()
    sys.exit(app.exec_())   
Ich habe das auslesen aus der DB rausgenommen und dafür einfach nur die dbreturn eingefügt

Danke schon mal
Gruß ScooB
lunar

@ScooB: Die ganze Problembeschreibung bitte nochmal in strukturierten Sätzen mit korrekter Interpunktion. In der Form ist es mir schlicht unmöglich, Dein Problem zu erkennen.

So muss ich raten, und würde darauf tippen, dass Du einfach "partial(self.test, 1111)" in "partial(self.test, i)" ändern musst. "partial(self.test, 1111)" ergibt überhaupt keinen Sinn und hinterlässt den Eindruck, als würdest Du nicht so genau wissen, was "partial()" überhaupt bedeutet, und mehr oder weniger nach Versuch und Irrtum programmieren.
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

@lunar

Oki danke du hast mein Problem erkannt irgendwie ist das so blöd wenn man auf den code schaut und einfach nur ins leere schaut

die 1111 waren nur zum testen da

Danke
Antworten