为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2023-06-20 13:27:51
我是一名 Python 初学者,正在使用 tkinter 开发图形用户界面。我有一个按钮,它调用一个函数来打开一个 csv 文件并读取它,然后我想从该文件中获取该函数中的值以在另一个函数中使用它。如下面的示例代码所示,我使用return [XX , YY]语句取出数组,然后为它们赋值 ( XX, YY = Read_CSV())。虽然这有效,但问题是当我运行代码时,在我单击按钮之前,会弹出打开框对话框。那是因为XX, YY = Read_CSV()我正在调用一个函数,该函数应该仅在单击按钮时调用。如何在不调用该函数的情况下分配这些数组并将它们从函数中取出?from tkinter import *import pandas as pdfrom tkinter import filedialogroot = 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()
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

第一:不要使用,XX, YY = Read_CSV()因为它会立即运行代码——但您不需要它。


第二:问题是当你按下按钮并且它运行你的函数时它不关心你发送的是什么return因为它不知道如何处理这些值(你不能通知按钮它必须将它分配给) 这就是您需要直接为外部变量赋值XX, YY的时刻。global


import tkinter as tk

from tkinter import filedialog

import 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 start

yy = None  # default value at start


root = 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()None


frame = tk.LabelFrame(root, text='Frame')

frame.pack()

在filedialog有人可以点击Cancel然后filename将是None所以你应该在你尝试使用filename读取数据之前检查它。

查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信