在不调用该函数的情况下从函数中获取数组?

我是一名 Python 初学者,正在使用 tkinter 开发图形用户界面。我有一个按钮,它调用一个函数来打开一个 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()


肥皂起泡泡
浏览 114回答 1
1回答

慕雪6442864

第一:不要使用,XX, YY = Read_CSV()因为它会立即运行代码——但您不需要它。第二:问题是当你按下按钮并且它运行你的函数时它不关心你发送的是什么return因为它不知道如何处理这些值(你不能通知按钮它必须将它分配给) 这就是您需要直接为外部变量赋值XX, YY的时刻。globalimport tkinter as tkfrom tkinter import filedialogimport pandas as pd# --- functions ---def read_csv():    global xx  # use external variable instead of local one    global yy  # use external variable instead of local one        filename = filedialog.askopenfilename(initialdir='/Desktop',                                          title='Select Data File',                                          filetypes=(('All files', '*.*'),                                                     ('CSV file', '*.csv')))    if filename: # when user use `Cancel` then `filename will be `None`        data = pd.read_csv(filename, names=["A", "B"])        xx = data['A']  # it will assign to external variable        yy = data['B']  # it will assign to external variable    print(xx, yy)# --- main ---xx = None  # default value at startyy = None  # default value at startroot = tk.Tk()frame = tk.LabelFrame(root, text='Frame')frame.pack() # you have to do in separated line because `frame = tk.LabelFrame().pack()` gives `None` in `frame`csv_read_button = tk.Button(frame, text='Load Data', command=read_csv)csv_read_button.pack()root.mainloop()如果您将添加使用 的函数xx,yy并且意外地它可以在您加载数据之前运行,那么最好在开始时使用一些默认值(即)创建xx,并在您尝试从中获取值之前签入函数,yyNonexxyyNonexxyy当你做frame = tk.LabelFrame(root, text='Frame').pack()然后你分配None给frame因为pack()//返回。您必须分两行完成,才能将小部件分配给变量。grid()place()Noneframe = tk.LabelFrame(root, text='Frame')frame.pack()在filedialog有人可以点击Cancel然后filename将是None所以你应该在你尝试使用filename读取数据之前检查它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python