【发布时间】:2020-08-23 21:29:33
【问题描述】:
我是一名 Python 初学者,正在使用 tkinter 开发 gui。
我有一个按钮,它调用一个函数来打开一个 csv 文件并读取它,
然后我想从函数中获取这个文件中的值,以便在另一个函数中使用它。正如下面的示例代码所示,我使用return [XX , YY] 语句来获取数组,然后分配它们(XX, YY = Read_CSV())。虽然这可行,但问题是当我运行代码时,在我单击按钮之前,会弹出打开框对话框。那是因为在XX, YY = Read_CSV() 中,我正在调用一个应该仅在单击按钮时才调用的函数。
如何在不调用该函数的情况下分配这些数组并将它们从函数中取出?
from tkinter import *
import pandas as pd
from tkinter import filedialog
root = Tk()
root.geometry('200x200')
Frame=LabelFrame(root, text='Frame').pack()
def Read_CSV():
CSV_File_Name = filedialog.askopenfilename(initialdir='/Desktop',
title='Select Data File',
filetypes=(('All files', '*.*'),
('CSV file', '*.csv')))
Data_CSV = pd.read_csv(CSV_File_Name, names=["A", "B"])
XX = (Data_CSV['A']);
YY = (Data_CSV['B'])
return [XX, YY]
XX, YY = Read_CSV()
print(XX)
CSV_Read_Button = Button(Frame, text='Load Data', command=Read_CSV)
CSV_Read_Button.pack()
root.mainloop()
【问题讨论】:
-
你不能。
XX和YY在函数中的其余代码运行之前不能有值。你为什么还要XX, YY = Read_CSV()呢?除了打印之外,您从不使用任何一个值。摆脱那条线。 -
不要使用
XX, YY = Read_CSV()- 你不需要它。问题是,当按钮运行代码时,它无法获取您使用return发送的值,您必须在Read_CSV中使用global变量才能将其置于函数之外。 -
顺便说一句:参见PEP 8 -- Style Guide for Python Code - 它建议
lower_case_names用于变量和函数,CamelCaseNames仅用于类。它使代码更具可读性。 -
您可以将一个列表传递给
Read_CSV(),并使用该列表来存储返回值。 -
谢谢大家,@furas 的回答解决了这个问题。这段代码实际上是重现我的问题的一个例子,我的代码中有这个问题,这里带来了更加复杂和混乱的问题。再次感谢。
标签: python arrays function tkinter dialog