2013-07-19 38 views
0

我對PyQT4很新。我試圖將一個按鈕鏈接到表中的一個setItem。以下是我到目前爲止。連接到setItem的Python QtGui按鈕

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_()) 

我收到一個很長的錯誤(下面)。有沒有更好的方法將按鈕鏈接到我想要的結果。

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' 

回答

1

另一種解決方案:

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

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

你必須提供一個可調用的函數指針(如果你願意)connect。然而,而不是你正在評估setItem並給出答案。

嘗試,而不是執行以下操作:

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