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

Qt开发中如何将import_candy的all_data传递给show_candy方法?

解决Qt中Candy类方法间数据共享问题

核心思路是把all_data定义为Candy类的实例属性,让同一个Candy实例的import_candy和show_candy方法共享这个数据。具体修改如下:

修改File2的Candy类

  1. 在__init__方法中初始化实例属性self.all_data,用于存储读取到的ODS数据
  2. 修改import_candy方法,将读取到的数据赋值给self.all_data(按钮点击的槽函数返回值会被Qt忽略,无需return数据)
  3. 在show_candy方法中先判断self.all_data是否存在,避免未导入数据时触发错误,再使用self.all_data操作表格

修改后的File2代码:

import os
import pandas as pd
from PyQt5.QtWidgets import QFileDialog, QTableWidgetItem, QMessageBox

class Candy():
    def __init__(self, main_window):
        self.main_window = main_window
        # 初始化实例属性,存储ODS数据
        self.all_data = None

    def import_candy(self):
        path = QFileDialog.getOpenFileName(None, 'Open ODS', os.getenv('HOME'), 'ODS(*.ods)')[0]
        # 未选择文件直接返回
        if not path:
            return
        self.all_data = pd.read_excel(path, skiprows=5)
        if self.all_data.size == 0:
            self.all_data = None
            QMessageBox.warning(None, "提示", "导入的文件为空")
            return

    def show_candy(self):
        # 先判断是否已导入数据
        if self.all_data is None:
            QMessageBox.warning(None, "提示", "请先导入ODS文件")
            return
        # 使用实例属性self.all_data操作表格
        self.main_window.tableWidget.setRowCount(self.all_data.shape[0])
        self.main_window.tableWidget.setColumnCount(self.all_data.shape[1])
        self.main_window.tableWidget.setHorizontalHeaderLabels(self.all_data.columns)
    
        for row_idx, row in self.all_data.iterrows():
            for col_idx, value in enumerate(row):
                tableItem = QTableWidgetItem(str(value))
                self.main_window.tableWidget.setItem(row_idx, col_idx, tableItem)

关键说明

  • 原import_candy中的all_data是局部变量,仅在该方法作用域内有效,show_candy无法访问
  • 实例属性self.all_data属于单个Candy实例,每个界面实例对应独立的数据存储,比类级变量(所有实例共享)更适合当前场景
  • 添加了空文件、未导入数据的提示,提升用户交互体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:41:14