1 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
第一:不要使用,XX, YY = Read_CSV()因?yàn)樗鼤?huì)立即運(yùn)行代碼——但您不需要它。
第二:?jiǎn)栴}是當(dāng)你按下按鈕并且它運(yùn)行你的函數(shù)時(shí)它不關(guān)心你發(fā)送的是什么return因?yàn)樗恢廊绾翁幚磉@些值(你不能通知按鈕它必須將它分配給) 這就是您需要直接為外部變量賦值XX, YY的時(shí)刻。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()
如果您將添加使用 的函數(shù)xx,yy并且意外地它可以在您加載數(shù)據(jù)之前運(yùn)行,那么最好在開始時(shí)使用一些默認(rèn)值(即)創(chuàng)建xx,并在您嘗試從中獲取值之前簽入函數(shù),yyNonexxyyNonexxyy
當(dāng)你做
frame = tk.LabelFrame(root, text='Frame').pack()
然后你分配None給frame因?yàn)閜ack()//返回。您必須分兩行完成,才能將小部件分配給變量。grid()place()None
frame = tk.LabelFrame(root, text='Frame')
frame.pack()
在filedialog有人可以點(diǎn)擊Cancel然后filename將是None所以你應(yīng)該在你嘗試使用filename讀取數(shù)據(jù)之前檢查它。
添加回答
舉報(bào)