2016-01-14 5 views
2

Я использовал QtDesigner для создания простой формы с QTableWidget. Я запускаю программу, а затем заполняю пару ячеек номерами. Когда я пытаюсь получить доступ к данным с помощью .itemAt(1,1) или .itemAt(2,1), я могу получить только значение в ячейке (1,1). Это показывают операторы печати в функции getDataFromTable.QTableWidget не может получить введенные пользователем данные

Я новичок в 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_()) 

ответ

1

Вы должны использовать метод 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()) 

Это даст вам QTableWidgetItem, расположенный на нулевой основе позиции в строки/столбца. Этот QTableWidgetItem содержит введенное пользователем значение, которое вы используете с помощью метода .text() в этом примере.

Предполагая, что мы запускаем приложение и ввести алфавит в порядке слева направо, начиная с верхней части:

# awesome QTableWidget representation with rows and columns 
    0 1 2 
    +---------+ 
0 |a | b | c| 
    +--+---+--+ 
1 |d | e | f| 
    +--+---+--+ 
2 |g | h | i| 
    +---------+ 

вы получаете e в позиции строки/COL (1, 1) и h в позиции строки/COL (2, 1) :

➜ /tmp python3 -B app.py 
Data from Table 
e 
h 
Смежные вопросы