Я новичок в Tkinter и Python. У меня три кнопки с командами в моем фрейме Tkinter. Кнопка 1 вызывает open_csv_dialog(), открывает диалоговое окно файла, чтобы выбрать CSV-файл и возвращает путь. Кнопка 2 вызывает save_destination_folder(), открывает диалоговое окно файла, чтобы открыть предпочтительный каталог и вернуть путь.Python 3 - команды кнопки Tkinter
Моя проблема с кнопкой 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 о командах и обыскал SO для получения возможного ответа, поэтому извиняюсь, если об этом ответили раньше, и я не смог его найти.
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()
У вас есть синтаксическая ошибка btw, еще одна '(' then ')'. –