QTableWidget 无法获取用户输入的数据
QTableWidget cannot get user entered data
我使用 QtDesigner 创建了一个带有 QTableWidget
的简单表单。我 运行 程序,然后用数字填充几个单元格。当我尝试使用 .itemAt(1,1)
或 .itemAt(2,1)
访问数据时,我只能获取单元格 (1,1)
中的值。 getDataFromTable
函数中的打印语句显示了这一点。
我是 Python 的新手。任何帮助是极大的赞赏。我的代码和 QtDesigner 的代码如下。
from Ui_SimpleTable import Ui_MainWindow
import sys
from PyQt4 import QtGui, QtCore
class Main(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, ):
super (Main,self).__init__()
self.setupUi(self)
self.pbGetData.clicked.connect(self.getDataFromTable)
def getDataFromTable (self, item):
print ("Data from Table")
test = self.dataTable.itemAt(1,1)
print (test.text())
test2 = self.dataTable.itemAt(2,1)
print (test2.text())
if __name__ == '__main__':
app=QtGui.QApplication(sys.argv)
main=Main()
main.show()
QtGui.QTableWidget.itemAt
sys.exit(app.exec_())
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_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(701, 632)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.dataTable = QtGui.QTableWidget(self.centralwidget)
self.dataTable.setGeometry(QtCore.QRect(50, 30, 371, 511))
self.dataTable.setRowCount(30)
self.dataTable.setColumnCount(3)
self.dataTable.setObjectName(_fromUtf8("dataTable"))
self.pbGetData = QtGui.QPushButton(self.centralwidget)
self.pbGetData.setGeometry(QtCore.QRect(480, 30, 75, 23))
self.pbGetData.setObjectName(_fromUtf8("pbGetData"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 701, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.pbGetData.setText(_translate("MainWindow", "Get Data", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您需要使用 item(row, col)
方法而不是 itemAt(x, y)
方法。
def getDataFromTable (self, item):
print ("Data from Table")
test = self.dataTable.item(1,1)
print (test.text())
test2 = self.dataTable.item(2,1)
print (test2.text())
这将为您提供位于 zero-based row/column 位置的 QTableWidgetItem
。此 QTableWidgetItem
包含 user-entered 值,您在此示例中使用 .text()
方法获得该值。
假设我们启动应用程序并从顶部开始按 left-to-right 的顺序输入字母表:
# awesome QTableWidget representation with rows and columns
0 1 2
+---------+
0 |a | b | c|
+--+---+--+
1 |d | e | f|
+--+---+--+
2 |g | h | i|
+---------+
你在 row/col 位置 (1, 1)
得到 e
和 h
在 row/col 位置 (2, 1)
:
➜ /tmp python3 -B app.py
Data from Table
e
h
我使用 QtDesigner 创建了一个带有 QTableWidget
的简单表单。我 运行 程序,然后用数字填充几个单元格。当我尝试使用 .itemAt(1,1)
或 .itemAt(2,1)
访问数据时,我只能获取单元格 (1,1)
中的值。 getDataFromTable
函数中的打印语句显示了这一点。
我是 Python 的新手。任何帮助是极大的赞赏。我的代码和 QtDesigner 的代码如下。
from Ui_SimpleTable import Ui_MainWindow
import sys
from PyQt4 import QtGui, QtCore
class Main(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, ):
super (Main,self).__init__()
self.setupUi(self)
self.pbGetData.clicked.connect(self.getDataFromTable)
def getDataFromTable (self, item):
print ("Data from Table")
test = self.dataTable.itemAt(1,1)
print (test.text())
test2 = self.dataTable.itemAt(2,1)
print (test2.text())
if __name__ == '__main__':
app=QtGui.QApplication(sys.argv)
main=Main()
main.show()
QtGui.QTableWidget.itemAt
sys.exit(app.exec_())
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_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(701, 632)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.dataTable = QtGui.QTableWidget(self.centralwidget)
self.dataTable.setGeometry(QtCore.QRect(50, 30, 371, 511))
self.dataTable.setRowCount(30)
self.dataTable.setColumnCount(3)
self.dataTable.setObjectName(_fromUtf8("dataTable"))
self.pbGetData = QtGui.QPushButton(self.centralwidget)
self.pbGetData.setGeometry(QtCore.QRect(480, 30, 75, 23))
self.pbGetData.setObjectName(_fromUtf8("pbGetData"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 701, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.pbGetData.setText(_translate("MainWindow", "Get Data", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您需要使用 item(row, col)
方法而不是 itemAt(x, y)
方法。
def getDataFromTable (self, item):
print ("Data from Table")
test = self.dataTable.item(1,1)
print (test.text())
test2 = self.dataTable.item(2,1)
print (test2.text())
这将为您提供位于 zero-based row/column 位置的 QTableWidgetItem
。此 QTableWidgetItem
包含 user-entered 值,您在此示例中使用 .text()
方法获得该值。
假设我们启动应用程序并从顶部开始按 left-to-right 的顺序输入字母表:
# awesome QTableWidget representation with rows and columns
0 1 2
+---------+
0 |a | b | c|
+--+---+--+
1 |d | e | f|
+--+---+--+
2 |g | h | i|
+---------+
你在 row/col 位置 (1, 1)
得到 e
和 h
在 row/col 位置 (2, 1)
:
➜ /tmp python3 -B app.py
Data from Table
e
h