#python #python-3.x #pyqt5 #qtablewidget #qtablewidgetitem
#python #python-3.x #pyqt5 #qtablewidget #qtablewidgetitem
Вопрос:
Я создал таблицу в PyQt5 и извлекаю данные из ячейки с помощью этого метода. Но когда я пытаюсь, ячейка в QTableWidgetItem становится None. Итак, как я могу решить эту проблему и как я могу вставить другие определенные элементы в определенную ячейку, например, для элемента 2, item3,… Спасибо
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem)
from PyQt5.QtGui import QBrush, QColor
from PyQt5 import QtCore
data = {'111':['Title 1','121','94565','','','','684651','','','44651','','',''], '112':['Title 2','65115','','466149','46645','555641','','','','412045','98416','',''], '113':['Title 3','','','','466149','46645','555641','98656','','','412045','98416','','']}
class Table(QWidget):
def __init__(self, *args, parent=None):
super().__init__()
self.data = data
self.setuptUI()
k = 'str'
v = int
n = int
m = int
self.setdata(k, v, n, m)
def setuptUI(self):
self.setWindowTitle("QTableWidgetItem")
self.resize(1200, 800)
conLayout = QHBoxLayout()
self.tableWidget =QTableWidget(self)
self.tableWidget.setRowCount(55)
self.tableWidget.setColumnCount(14)
conLayout.addWidget(self.tableWidget)
def setdata(self, k, v, n, m):
global item
item = str(self.data.get(k))
for key in self.data:
if k in key:
item = self.data.get(k)[v]
print(item)
newItem = QTableWidgetItem(str(item))
newItem.setForeground(QBrush(QColor(255, 0, 0)))
self.tableWidget.setItem(23, 4, newItem)
if __name__ == '__main__':
app = QApplication(sys.argv)
windows = Table(data)
item1= Table()
item1.setdata(k="113", v=5, n=24, m=4)
#item2= Table()
#item2.setdata(k="113", v=5, n=25, m=4
windows.show()
sys.exit(app.exec_())
Ответ №1:
Попробуйте:
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem)
from PyQt5.QtGui import QBrush, QColor
from PyQt5 import QtCore
data = {'111':['Title 1','121','94565','','','','684651','','','44651','','',''],
'112':['Title 2','65115','','466149','46645','555641','','','','412045','98416','',''],
'113':['Title 3','','','','466149','46645','555641','98656','','','412045','98416','','']}
class Table(QWidget):
def __init__(self, data): # data
super().__init__()
self.data = data
self.setuptUI()
# k = 'str'
# v = int
# n = int
# m = int
# self.setdata(k, v, n, m)
def setuptUI(self):
self.setWindowTitle("QTableWidgetItem")
self.resize(1200, 600)
conLayout = QHBoxLayout(self) # self
self.tableWidget = QTableWidget(self)
self.tableWidget.setRowCount(55)
self.tableWidget.setColumnCount(14)
conLayout.addWidget(self.tableWidget)
def setdata(self, k, v, n, m):
# global item # ---
# item = str(self.data.get(k))
# for key in self.data:
# if k in key:
item = self.data.get(k)[v]
print(item)
newItem = QTableWidgetItem(str(item))
newItem.setForeground(QBrush(QColor(255, 0, 0)))
# self.tableWidget.setItem(23, 4, newItem)
self.tableWidget.setItem(n, m, newItem)
if __name__ == '__main__':
app = QApplication(sys.argv)
windows = Table(data)
#- item1= Table()
#- item1.setdata(k="113", v=5, n=24, m=4)
windows.setdata(k="113", v=5, n=24, m=4)
windows.setdata(k="113", v=6, n=24, m=5) # v=6, m=5
windows.show()
sys.exit(app.exec_())
Комментарии:
1. но в другом модуле, который показывает мне, произошло исключение: объект TypeError ‘NoneType’ не поддается подписке
2. Очевидно, вы установили ключ (k = «555»), которого нет в словаре
3. Вставьте строку
print("Value : %s" % data.get(k, "Never"))
перед строкойitem = self.data.get(k)[v]
и посмотрите, что будет напечатано.4. он показывает мне значение: Never, И если я удалю [v], ошибка такова: TypeError: в updateData () отсутствуют 3 обязательных позиционных аргумента: ‘v’, ‘n’ и ‘m’
5. Я разобрался с проблемой, братан, в этом модуле у меня есть метод 1, который преобразует CSV-файл в словарь. В первом состоянии словарь был пуст, и когда я вызвал метод 1, словарь стал полным. Между тем, метод 2 ссылается «setdata» на состояние пустого словаря, а не на полный, вот почему он не показывает мне None, даже если я распечатал словарь, он покажет мне {}. Итак, если у вас есть идея, как использовать словарь из метода 1?