【发布时间】:2016-08-03 16:58:30
【问题描述】:
我也是 Tkinter 和 Python 的新手。我的 Tkinter 框架中有三个带有命令的按钮。按钮 1 调用 open_csv_dialog(),打开文件对话框以选择 .csv 文件并返回路径。按钮 2 调用 save_destination_folder(),打开文件对话框以打开首选目录并返回路径。
我的问题是按钮 3。它调用 modify_word_doc() 需要从按钮 1 和按钮 2 返回的文件路径。
我试过了;
button3 = ttk.Button(root, text="Run", command=lambda: modify_word_doc(open_csv_dialog, save_destination_folder)).pack()
但这显然只是提示文件对话框再次打开 open_csv_dialog() 和 save_destination_folder() 函数,这是不希望的。我想只使用这两个函数已经返回的文件路径并将其传递给 modify_word_doc 而不会被另一个文件对话框提示。我也尝试过使用partial,但我要么用错了,要么仍然有同样的不良后果。
我已经阅读了关于命令的 Tkinter 文档并搜索了一个可能的答案,所以如果之前已经回答过这个问题并且我没有找到它,我们深表歉意。
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
import os
import csv
import docx
from functools import partial
root = tk.Tk()
def open_csv_dialog():
file_path = filedialog.askopenfilename(filetypes=(("Database files",
"*.csv"),("All files", "*.*")))
return file_path
def save_destination_folder():
file_path = filedialog.askdirectory()
return file_path
def modify_word_doc(data, location):
#data = open_csv_dialog()
#location = save_destination_folder()
#long code. takes .csv file path opens, reads and modifies word doc with
#the contents of the .csv, then saves the new word doc to the requested
#file path returned from save_destination_folder().
label = ttk.Label(root, text="Step 1 - Choose CSV File.",
font=LARGE_FONT)
label.pack(pady=10, padx=10)
button = ttk.Button(root, text="Choose CSV",
command= open_csv_dialog).pack()
label = ttk.Label(root,
text="Step 2 - Choose destination folder for your letters.",
font=LARGE_FONT)
label.pack(pady=10, padx=10)
button2 = ttk.Button(root, text="Choose Folder",
command=save_destination_folder).pack()
label = ttk.Label(root, text="Step 3 - Select Run.", font=LARGE_FONT)
label.pack(pady=10, padx=10)
button3 = ttk.Button(root, text="Run",
command=lambda: modify_word_doc(open_csv_dialog, save_destination_folder)).pack()
root.mainloop()
【问题讨论】:
-
顺便说一句,你有一个语法错误,还有一个
(,然后是)。