TableWidget weigert sich Signale zu versenden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
yaem
User
Beiträge: 8
Registriert: Sonntag 19. Juni 2011, 21:52

Kaum läuft das logische Zeugs, kommt auch schon das Grafische um Probleme zu machen. Ich hab im Designer ein WidgetTable, Göße 1x1 Zellen, zum MainWindow hinzugefügt und will nun auf Klicks reagieren. Es soll immer die ganze Zeile ausgewählt werden und das auswählen mehrer Zeilen soll verhindert werden.

Code: Alles auswählen

    
def __init__ (self, parent = None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)


        self.connect(self.ui.table, SIGNAL('cellClicked()'), self.cell_activated)
        
    def cell_activated(self, row, col):
      print("Helloooo!")

...so doof ich auch dadrin rumklicke oder welche Signale ich auch verknüpfe - "Helloooo" wird nie ausgegeben. Mit PushButtons bekomm ichs aber hin.
Any suggestions?
lunar

@yaem: Bitte achte auf die korrekte Einrückung, und zeige lauffähige Beispiele.

Das Signal "cellClicked()" wird deswegen nicht ausgelöst, weil es dieses Signal gar nicht gibt. Du suchst cellClicked(int, int). Die Argumente von Signalen sind Bestandteil des Signal-Namens und können keinesfalls weggelassen werden. Mithin sind "cellClicked()" und "cellClicked(int, int)" nicht dasselbe!

Verwende die neue Signal-Slot-API, also "self.ui.table.cellClicked.connect(self.cell_activated)", um solche Fehler von vorne herein auszuschließen. Bei dieser API wird automatisch eine Standard-Überladung des Signals ausgewählt, wenn man keine Argumenttypen angibt. Gibt es nur eine Überladung des Signals (wie in diesem Fall), wird natürlich diese ausgewählt. "self.ui.cellClicked" ist also äquivalent zu "self.ui.cellClicked[int, int]", was wiederum äquivalent zu "SIGNAL('cellClicked(int, int)')" ist (aber eben nicht zu "SIGNAL('cellClicked()')"!).

Außerdem löst die neue API Ausnahmen aus, wenn Du versuchst, zu nicht-existierenden Signalen oder nicht-existierenden Überladungen eines Signals zu verbinden. Das erleichtert die Fehlersuche, weil sich das Programm nicht einfach stillschweigend falsch verhält (so wie in diesem Fall).
Antworten