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))
关键修正说明
- 设置表格列数:添加
self.table_widget.setColumnCount(2),确保表格有足够列数承载输入、输出文件名。 - 修复更新语句:删除错误的
self.table_widget.Update,替换为标准的self.table_widget.update()(实际可省略,因为设置单元格后表格会自动刷新)。 - 简化单元格创建:直接通过
QTableWidgetItem(文本)初始化,替代先创建再调用setText的冗余写法。
内容的提问来源于stack exchange,提问作者Virginia Walters
相关产品推荐
相关产品推荐

