【问题标题】:Pyqt5: QtableWidgetItem "None"Pyqt5:QtableWidgetItem“无”
【发布时间】: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_())

【问题讨论】:

    标签: python python-3.x pyqt5 qtablewidget qtablewidgetitem


    【解决方案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 中的字典?
    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2011-08-12
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2013-12-01
    相关资源
    最近更新 更多