Seite 1 von 1

QTableWidget mit QComboBoxen, Änderungen registrieren?

Verfasst: Sonntag 30. Mai 2010, 14:39
von EmaNymton
Hallo zusammen,
ich habe folgendes Problem: Ich habe eine Tabelle erstellt, in der ich die Zellen mit setCellWidget zu ComboBoxen umfunktioniert habe. Ich möchte nun die Tabelle beim Verlassen des Fensters speichern, wenn etwas geändert wurde. Das tableWidget reagiert aber verständlicherweise auf eine Änderung einer ComboBox nicht. Das Problem ist, dass ich nicht jede ComboBox mit einem connect versehen will und kann, da diese innerhalb einer for-Schleife angelegt werden.

Code: Alles auswählen

def notenSetzen(self):
        zeile = 0
        for notenliste in self.noten:
            	spalte = 0
            	for item in notenliste:
			newitem = QtGui.QComboBox()
			newitem.insertItems(0,self.kurs.notenstufen()) 		
			self.tableWidget.setCellWidget(zeile,spalte,newitem)
                	spalte += 1
        	zeile += 1
Hintergrund dieser Anordnung: Die Anwendung soll ein Notenbuch fürs N900 abbilden, wo der Benutzer beim Klicken auf eine Zelle eine Auswahl an Notenstufen erhält, also 1+ ,1 , 1-, ...
noten enhält jeweils die Notenliste einzelner Schüler des Kurses.
Hat jemand eine Idee oder eine alternative Möglichkeit?
Gruß
EmaNymton

Re: QTableWidget mit QComboBoxen, Änderungen registrieren?

Verfasst: Sonntag 30. Mai 2010, 15:39
von EmaNymton
Mal wieder wer suchet der findet :D

Stichwort war QSignalMapper. Der Code sieht jetzt so aus

Code: Alles auswählen

def notenSetzen(self):
        zeile = 0
        for notenliste in self.noten:
            	spalte = 0
            	for item in notenliste:
                        newitem = QtGui.QComboBox()
                        newitem.insertItems(0,self.kurs.notenstufen())
                        self.connect(newitem, QtCore.SIGNAL("currentIndexChanged(int)"), self.signalMapper, QtCore.SLOT("map()"))
                        self.signalMapper.setMapping(newitem,item)
                        self.tableWidget.setCellWidget(zeile,spalte,newitem)
                        spalte += 1
         zeile += 1
und das ganze wird dann noch außerhalb der Methode mit

Code: Alles auswählen

self.connect(self.signalMapper,QtCore.SIGNAL("mapped(int)"),self.tableWasModified)
verbunden.

Vielleicht hilfts ja jemandem, der ein ähnliches Problem hat.

Re: QTableWidget mit QComboBoxen, Änderungen registrieren?

Verfasst: Montag 31. Mai 2010, 17:23
von Hyperion
Ich meine mich zu erinnern, dass man das Pythonischer lösen konnte! Ich muss mal zu Hause in altem Code wühlen, wo ich einen Lösungsansatz von Lunar mal umgesetzt hatte.

Re: QTableWidget mit QComboBoxen, Änderungen registrieren?

Verfasst: Montag 31. Mai 2010, 18:21
von lunar
@Hyperion: Man kann im Allgemeinen jede Anwendung von QSignalMapper durch partielle Funktionen ersetzen. Partielle Funktionen kann man entweder mit lambda oder mit functools.partial erzeugen.