在文件 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
。有什么想法吗?
我无意中得到了答案。 糟糕的是我用了
all_data
而不是self.all_data
。
当我使用 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)