Trying_hard
Trying_hard

Reputation: 9501

Python QtGui Push Button linked to setItem

I am very new to PyQT4. I am trying to link a button to a setItem in a table. Below is what I have so far.

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(400, 300)
        self.tableWidget = QtGui.QTableWidget(Form)
        self.tableWidget.setGeometry(QtCore.QRect(0, 0, 256, 192))
        self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(3)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(90, 230, 75, 23))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))            
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.tableWidget.setItem(0,0,QtGui.QTableWidgetItem("test")))
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "form", None))
        self.pushButton.setText(_translate("Form", "CLEAR", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

I get an error that is pretty long ( below ). Is there a better way to link the button to the desire results I want.

Traceback (most recent call last):
  File "C:\Python27\Lib\site-packages\PyQt4\test_scripts\ag_test.py", line 57, in <module>
    ui.setupUi(Form)
  File "C:\Python27\Lib\site-packages\PyQt4\test_scripts\ag_test.py", line 40, in setupUi
    QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.tableWidget.setItem(0,0,QtGui.QTableWidgetItem("Adam")))
TypeError: arguments did not match any overloaded call:
  QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
  QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
  QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 2 has unexpected type 'str'

Upvotes: 0

Views: 980

Answers (2)

Frodon
Frodon

Reputation: 3775

Another solution:

def setupUi(self, Form):
  ...
  self.pushButton.clicked.connect(self.setTableWidgetItem)

def setTableWidgetItem(self):
  self.tableWidget.setItem(0,0,QtGui.QTableWidgetItem("test"))

Upvotes: 1

Gustav Larsson
Gustav Larsson

Reputation: 8487

You have to supply connect with a callable (a function pointer, if you will). However, instead of that you are evaluating setItem and giving it the answer.

Try the following instead:

QtCore.QObject.connect(..., lambda x: self.tableWidget.setItem(0,0,QtGui.QTableWidgetItem("test")))

Upvotes: 0

Related Questions