【发布时间】:2020-11-11 02:57:20
【问题描述】:
我正在尝试使用一个按钮构建一个 Tkinter UI,用户可以在其中选择一个主文件,并根据该文件中的信息,该脚本将获取有关某些辅助文件的一些信息。选择主文件后,我试图使用主文件的文件路径来获取辅助文件的文件路径。但是,因为我两次调用函数“open_main_file()”,所以我得到两个对话框,用户必须在其中选择主文件两次而不是一次。我该如何规避呢?
我的代码如下所示:
import pandas as pd
from tkinter import *
from os.path import dirname
from tkinter import filedialog
root = Tk()
def open_main_file():
return filedialog.askopenfilename()
def parse_main_file():
return pd.read_parquet(open_main_file(), engine='pyarrow')
def get_some_ids():
return parse_main_file()['some_ids'].iloc[0]
def get_list_of_other_files():
other_files_path = dirname(dirname(dirname(open_main_file())))
list_of_other_files = []
for f in get_some_ids():
list_of_other_files.append(glob.glob(other_files_path + '/identifier=' + str(f) + '/*'))
return map(''.join, list_of_other_files)
myButton = Button(root, text='Open File...', command=get_list_of_other_files).pack()
root.mainloop()
【问题讨论】:
-
@Wanja 不正确。如果你想使用它们,你需要导入 Filedialog 和一些其他的,比如 ttk 分开。
-
当我这样做时,我得到“NameError: name 'filedialog' is not defined”,好像它没有被导入一样
-
@Atlas435 哦,对不起,你是对的。我的坏
-
请注意:
myButton = Button(root, text='Open File...', command=get_list_of_other_files).pack()会将myButton设置为None,因为方法pack不会返回任何内容。我建议删除该方法,然后使用myButton.pack()调用它以避免将来出现错误 -
另外,尽量和你的变量名保持一致,把
myButton改成my_button