Pyqt5:QtableWidgetItem“无”
Posted
技术标签:
【中文标题】Pyqt5:QtableWidgetItem“无”【英文标题】:Pyqt5: QtableWidgetItem "None" 【发布时间】:2019-03-14 20:02:41 【问题描述】:我在 PyQt5 中创建了一个表格,并通过此方法检索单元格中的数据。但是当我尝试 QTableWidgetItem 中的单元格变为无时。那么,我该如何解决这个问题,以及如何在特定单元格中插入其他确定的项目,例如项目 2、项目 3、...谢谢
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_())
【讨论】:
但在其他模块中显示异常发生:TypeError 'NoneType' object is not subscriptable 您显然设置了不在字典中的键 (k = "555") 在item = self.data.get(k)[v]
行之前插入一行print("Value : %s" % data.get(k, "Never"))
,看看会打印什么。
它向我显示值:从不如果我删除 [v],错误是:TypeError:updateData() 缺少 3 个必需的位置参数:'v'、'n' 和 'm'跨度>
兄弟,我找到了问题所在,在这个模块中,我有一个方法 1,可以将 CSV 文件转换为字典。在第一个状态下,字典是空的,当我调用方法 1 时,字典变满了。同时,方法 2“setdata”引用了空字典而不是完整字典的状态,这就是为什么它显示为 None,即使我打印字典也会显示 。那么,如果您知道如何使用方法 1 中的字典?以上是关于Pyqt5:QtableWidgetItem“无”的主要内容,如果未能解决你的问题,请参考以下文章
python pyqt5 QTableWidget 添加右键菜单