Python:使用需要通过单击按钮导入的另一个文件中的变量

问题描述 投票:0回答:1

在文件 1 中,我有 2 个按钮。

from file2 import Candy

class MyInterface (QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowTitle("Candy")

        self.candy_instance = Candy(self)
        self.candy_import_button.clicked.connect(self.candy_instance.import_candy)
        self.candy_show_button.clicked.connect(self.candy_instance.show_candy)

在文件 2 中,我有导入和显示 ODS 文件的方法

class Candy():
    def __init__(self, main_window):
        self.main_window = main_window

    def import_candy(self):
        path = QFileDialog.getOpenFileName(None, 'Open ODS', os.getenv('HOME'), 'ODS(*.ods)')[0]
        all_data = pd.read_excel(path, skiprows=5)
        if all_data.size == 0:
            return
        return all_data

    def show_candy(self):
        self.main_window.tableWidget.setRowCount(all_data.shape[0])
        self.main_window.tableWidget.setColumnCount(all_data.shape[1])
        self.main_window.tableWidget.setHorizontalHeaderLabels(all_data.columns)
    
        for row in all_data.iterrows():
            values = row[1]
            for col_index, value in enumerate(values):
                tableItem = QTableWidgetItem(str(value))
                self.main_window.tableWidget.setItem(row[0], col_index, tableItem)

如何将all_data的变量从

import_candy
传递到
show_candy
import_candy
只能在单击按钮后运行。 导入后,我想用另一个按钮显示表格。

我读了其他问题,然后我尝试了,

def show_candy(self):
    all_data = import_candy()
    ~

当然它需要我再次导入,所以这不是我想要的。 之后,我尝试声明类级别变量,

class Candy():
    def __init__(self, main_window):
        self.main_window = main_window
    all_data = None

但我不知道如何,如果我声明了

all_data = Candy.all_data

我还没有导入任何东西,所以这不是有歧义吗?

我只需要将变量从

import_candy
传递到
show_candy
。有什么想法吗?

python file variables return-value pyside6
1个回答
0
投票

我无意中得到了答案。 糟糕的是我用了

all_data 
而不是
self.alldata
。 当我使用 alt+f2 全局更改
all_data 
时。 该代码按照我的预期运行良好。

这就是结果。

class Candy():
def __init__(self, main_window):
    self.main_window = main_window
    self.all_data = None #I declared the Variable


def import_candy(self):
    path = QFileDialog.getOpenFileName(None, 'Open ODS', os.getenv('HOME'), 'ODS(*.ods)')[0]
    self.all_data = pd.read_excel(path, skiprows=5)
    if self.all_data.size == 0:
        return
    return self.all_data

def show_candy(self):
    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 in self.all_data.iterrows():
        values = row[1]
        for col_index, value in enumerate(values):
            tableItem = QTableWidgetItem(str(value))
            self.main_window.tableWidget.setItem(row[0], col_index, tableItem)
© www.soinside.com 2019 - 2024. All rights reserved.