1 回答
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读取数据之前检查它。
添加回答
举报