gpt4 book ai didi

python - "File not found"tkinter 按钮命令出错

转载 作者:行者123 更新时间:2023-12-01 07:32:46 24 4
gpt4 key购买 nike

我正在使用 tkinter 创建 GUI。图形用户界面:

  • 询问用户想要打开哪两个 csv 文件
  • 然后对这些数据进行处理。它很长,对于这个问题,我们假设它被称为“test”,并使用 pandas 读取每个文件,然后返回每个文件的前 5 行。

我有一个名为“验证”的按钮,我希望它将“测试”应用于我从两个 Entry.get() 获得的选定文件。当我尝试执行该文件时,出现此错误:

FileNotFoundError: [Errno 2] File b'' does not exist: b''

我想这与路径语法有关 - 我在 Windows 上,所以文件的路径有反斜杠。我尝试添加“r”特殊字符以通过各种方式获取原始字符串文字,但它不起作用(相同的错误或有时文件 b'r' 不存在:b'r'。)

我感到好奇的是,错误发生在我什至选择任何文件之前。如果我删除该命令,GUI 就可以正常工作。

这个错误从何而来?我该如何修复它?

我在 Windows 10 上使用 Python 3.7.3、Spyder 3.3.5 和 IPython 7.6.1

这是我的代码(有点长但已经简化):

from tkinter import Tk, Frame, Label, Button, Entry, filedialog as fd

def test(fileL, fileT):
import pandas as pd

df1 = pd.read_csv(fileL)
df2 = pd.read_csv(fileT)

return df1.head(5), df2.head(5)


class Selection:
def __init__(self, master):
self.load_button = Button(master, text="...", command=self.loadFile)
self.filedir = Entry(master)

def loadFile(self):
self.filename = fd.askopenfilename()
self.filedir.delete(0,"end")
self.filedir.insert(0, self.filename)

if __name__=='__main__':

#-------Defining the Root window
root = Tk()
root.geometry("1000x600+455+210")

root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=2)
root.grid_columnconfigure(2, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)
root.grid_rowconfigure(2, weight=1)
root.grid_rowconfigure(3, weight=1)

#-------Defining the Frame

f2 = Frame(root, bg='#D5F4E4')

f2.grid_columnconfigure(0, weight=1)
f2.grid_columnconfigure(1, weight=3)
f2.grid_columnconfigure(2, weight=1)
f2.grid_rowconfigure(0, weight=1)
f2.grid_rowconfigure(1, weight=1)
f2.grid_rowconfigure(2, weight=1)
f2.grid_rowconfigure(3, weight=1)

#-------Defining the Widgets
TexteL = Label(f2, text="Please select file L :")
TexteT = Label(f2, text="Please select file T :")

k = Selection(f2)
j = Selection(f2)

#--The said button--
# To see how it looks like without bug, replace by just :
# Validate = Button(root, text="Execute")

Validate = Button(root, text="Execute",command=test(
k.filedir.get(),
j.filedir.get())
)

#-------Grid everything
f2.grid(row=1,column=1, sticky="nsew")

TexteL.grid(row=0,column=1)
TexteT.grid(row=2,column=1)

k.load_button.grid(row=1, column=2)
k.filedir.grid(row=1, column=1, sticky='ew')

j.load_button.grid(row=3, column=2)
j.filedir.grid(row=3, column=1, sticky='ew')

Validate.grid(row=3, column=2,sticky='nsew')

root.mainloop()

最佳答案

comman= 需要不带 () 且不带参数的函数名称 - 它称为 “callback”

在代码中

command=test(k.filedir.get(), j.filedir.get())) 

函数 test() 在开始时执行(甚至在您看到窗口之前),并将其结果分配给 command= - 所以您还得到 command=无

您可以使用lambda来解决这个问题 - 它创建没有变量的函数

command=lambda:test(k.filedir.get(), j.filedir.get()))

或者你必须以正常方式创建函数

def some_function():
test(k.filedir.get(), j.filedir.get())

Button(..., command=some_function)

tkinter中,回调用于command=callbackbind(event,callback)after(time,callback)

<小时/>

文档:Button , Events and Bindings

关于python - "File not found"tkinter 按钮命令出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com