2017-09-20 59 views
1

我創建了下面的試驗代碼,以使一個程序,將excel工作表加載到數據幀,然後保存該數據幀到另一個Excel工作表(所有的用戶選擇的)限制蟒FileDialog的到一個特定的文件類型

import os 
import pandas 
from pandas import ExcelWriter 
import tkinter as tk 
from tkinter import filedialog 

class Load_Save_Program(): 

    def __init__(self,master): 
     self.master = master 

     self.button1=tk.Button(self.master,text="Load",command=self.Load_file) 
     self.button1.grid(row=0,column=0) 

     self.button2=tk.Button(self.master,text="Save",command=self.Save_file) 
     self.button2.grid(row=0,column=1) 

     self.text=tk.Text(master) 
     self.text.grid(row=1,column=0,columnspan=2) 

    def Load_file(self): 
     self.df_import=pandas.read_excel(filedialog.askopenfilename(initialdir = os.getcwd()), 
              filetypes=("excel files","*.xlsx")) 
     self.text.insert(tk.END,self.df_import) 

    def Save_file(self): 
     self.writer = ExcelWriter(filedialog.asksaveasfilename(initialdir = os.getcwd()), 
              filetypes=("Excel files", "*.xlsx")) 
     self.df_import.to_excel(self.writer,'sheet1') 
     self.writer.save() 

root=tk.Tk() 
Load_Save_Program(root) 
root.mainloop() 

我想要做的是擴大這個範圍,這樣當程序彈出文件目錄窗口時,它只會顯示.xlsx文件類型的文件,以避免用戶打開不兼容的文件類型時出現錯誤。到目前爲止,我還沒有想出任何可以解釋如何正確設置的信息。

回答

0

原來的順序很重要。此外,答案必須在文件類型周圍包含[]。這兩行有問題必須是

self.df_import=pandas.read_excel(filedialog.askopenfilename(filetypes=[("Excel files","*.xlsx")],initialdir = os.getcwd())) 
self.writer = ExcelWriter(filedialog.asksaveasfilename(filetypes=[("Excel files", "*.xlsx")],initialdir = os.getcwd())) 
+0

我非常確定順序並不重要(目前我無法測試),但文件類型的格式非常重要。它需要列表(或元組列表) –

+0

請隨時驗證這一點。我不知道爲什麼它很重要,但我嘗試了幾次切換命令,它只能正常工作是文件名在前面。 – jon

1

該filedalogs有一個文件類型選項來做你想要的。一般語法是filetypes=[(label1, ext1), (label2, ext2), ...]

在你的情況,這將使:

filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])

+0

我做了你所描述的改變(添加[])和程序運行完全一樣。它仍然顯示其他數據類型的文件。 – jon

+0

@jon您需要將'filetypes ='放在'askopenfilename'的括號內,而您的代碼並非如此。 –

+0

@jon,這正是你在答案中所做的。 –

相關問題