Pyside2 Clicked TableItem

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Gude,

ich habe ein Problem mit einer Qt anwendung (Pyside2)

Ich möchte ein Event beim Klicken spezifischer Tableitems ausführen hierzu versuche ich beispielsweise folgendes.

Leider bekomme ich hierbei eine Fehlermeldung.

Vielleicht hat ja jemand damit erfahrung. Dr Google konnte mir leider nicht weiterhelfen.

Code: Alles auswählen

from PySide2 import QtCore, QtWidgets ,QtGui

tableWidget = QtWidgets.QTableWidget()
tableWidget.setGeometry(QtCore.QRect(0, 200, 411, 161))
tableWidget.setObjectName("tableWidget")

def clicked(node, x, y):
        print x
        print y
        print node

for x in range(10):

	for y in range(10):
	
		_tableWidget.setItem(x, y, QtWidgets.QTableWidgetItem(str(x*y)))
	
		if x == y :
		
			_tableWidget.item(0, 0).cellClicked.connect(partial(clicked,"x")) 

Vielen Dank im Vorraus

Mit freundlichen Grüßen,
AndiArbeit
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und verraetst du uns auch noch die Fehlermeldung?
Benutzeravatar
__blackjack__
User
Beiträge: 14002
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich tippe mal auf einen `NameError` weil `_tableWidget` nirgends definiert ist. :-)

Edit: Ach nee, `SyntaxError` weil da die ``print`` als Anweisung verwendet wird, was es in Python 3 ja nicht mehr ist.
Zuletzt geändert von __blackjack__ am Dienstag 25. Februar 2020, 12:26, insgesamt 1-mal geändert.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke ja eher TypeError wegen fehlender Argumente beim callback. So ein bisschen Rate mal mit Rosenthal ist doch immer wieder knorke.
Benutzeravatar
__blackjack__
User
Beiträge: 14002
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`partial` ist auch undefiniert und wenn man das alles repariert, kommt:

Code: Alles auswählen

QWidget: Must construct a QApplication before a QWidget
Aborted (core dumped)
Der Fehler ist also das kein `QApplication`-Objekt erstellt wird. :-)
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Sorry hier noch die Fehlermeldung :D

_tableWidget.item(0, 0).cellClicked.connect(partial(clicked, parent))
AttributeError: 'PySide2.QtWidgets.QTableWidgetItem' object has no attribute 'cellClicked'

Ich habe aus einem relativ großen tool die snippets zusammen kopiert.

Wie gesagt es geht mir um eine Möglichkeit wie ich das klicken einzelner WidgetItems also Zellen mit einer Funktion verbinden kann
Benutzeravatar
__blackjack__
User
Beiträge: 14002
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Tja, diese Objekte haben halt auch kein `cellClicked`-Signal. Warum denkst Du die hätten das? `QTableWidget`-Objekte haben so ein Signal und das liefert die Zeilen- und Spaltennummer der geklickten Zelle.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na die Fehlermeldung ist ja recht eindeutig. cellClicked gibt's auf dem Item nicht. Woher hast du denn, dass es das geben sollte?

WAS es gibt ist https://doc.qt.io/qt-5/qtablewidget.html#cellClicked - also *EIN* Signal auf dem TableWidget selbst, und dann musst du aus den uebergebenen Koordinaten das Item aufloesen.
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Vielen Dank für die schnelle Antwort.

Damit kann ich arbeiten :)
Antworten