You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PYQT5中TableWidget读取数据后GUI表格未更新问题求助

PyQt5 TableWidget更新后空白的解决方法

问题分析

从代码和现象来看,数据已正确读取但表格无内容,核心问题有这些:

  • 无效的更新语句:self.table_widget.Update是错误写法,PyQt中无此属性,这行代码不仅无效,还可能引发隐藏错误。
  • 未设置表格列数:如果table_widget初始化时没设置列数(默认列数为0),即使添加了单元格内容,表格也不会显示。
  • 冗余的视图刷新:viewport().update()在正确设置单元格后并非必须,表格自身会自动刷新,但前提是前面的配置步骤正确。

修正后的代码

def rebuild_setup(self):
    try:
        print("Current working directory:", os.getcwd())

        # 获取文件前缀
        file_prefixes = [filename for filename in os.listdir() if filename.startswith('in_')]

        print("File prefixes:", file_prefixes)

        # 写入文件对到文件
        with open('file_pairs.txt', 'w') as f:
            try:
                for filename in file_prefixes:
                    f.write(filename + ',out_' + filename[3:] + '\n')

                print(os.getcwd())
                print(os.path.abspath('file_pairs.txt'))
                print("File Rebuilt!")
            except Exception as e:
                print("An error occurred while writing to the file:", str(e))

        # 检查文件是否存在
        if os.path.exists('file_pairs.txt'):
            print("'file_pairs.txt' exists.")
        else:
            print("'file_pairs.txt' does not exist.")

        # 读取文件数据
        with open('file_pairs.txt', 'r') as f:
            self.file_pairs = [tuple(line.strip().split(',')) for line in f]

        print("File pairs:", self.file_pairs)

        # 更新表格
        self.table_widget.setColumnCount(2)  # 确保表格有2列用于展示数据
        self.table_widget.setRowCount(len(self.file_pairs))

        for i, (in_file, out_file) in enumerate(self.file_pairs):
            print("Adding row", i, ":", in_file, ",", out_file)

            in_item = QTableWidgetItem(in_file)  # 直接初始化并设置文本,简化代码
            print("In item text:", in_item.text())
            self.table_widget.setItem(i, 0, in_item)

            out_item = QTableWidgetItem(out_file)
            print("Out item text:", out_item.text())
            self.table_widget.setItem(i, 1, out_item)
        
        # 正确的表格刷新(可选,setItem后表格会自动刷新)
        self.table_widget.update()
        print("Table Rebuilt!")

    except Exception as e:
        print("An error occurred:", str(e))

关键修正说明

  1. 设置表格列数:添加self.table_widget.setColumnCount(2),确保表格有足够列数承载输入、输出文件名。
  2. 修复更新语句:删除错误的self.table_widget.Update,替换为标准的self.table_widget.update()(实际可省略,因为设置单元格后表格会自动刷新)。
  3. 简化单元格创建:直接通过QTableWidgetItem(文本)初始化,替代先创建再调用setText的冗余写法。

内容的提问来源于stack exchange,提问作者Virginia Walters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:53:19