I often create file dialog screens during work. Create the following elements each time.
I have classified it so that it can be easily reused as my memorandum. Below is the source code. It also includes class inheritance (for your own memorandum).
import os
import csv
import tkinter as tk
from tkinter import filedialog
class Dialog_menu_screen(object):
def __init__(self,screen_title,screen_size,path_label,dialog_btn,start_btn):
self.screen_title = screen_title
self.screen_size = screen_size
self.path_label = path_label
self.dialog_btn = dialog_btn
self.start_btn = start_btn
#Main screen display
def show_main_screen(self):
root = tk.Tk()
root.title(self.screen_title)
root.geometry(self.screen_size)
#Widget creation
#You can read the method with arguments with lambda.
path_label = tk.Label(root,text=self.path_label)
path_box = tk.Entry(root,width=45)
dialog_btn = tk.Button(root,text=self.dialog_btn,command=lambda:self.show_dialog(path_box))
start_btn = tk.Button(root,width=10,text=self.start_btn,command=lambda:self.execute_button(path_box.get()))
#Widget position
path_box.grid(row=0,column=1,padx=10,pady=10)
dialog_btn.grid(row=0,column=2,padx=10,pady=10)
path_label.grid(row=0,column=0,padx=10,pady=10)
start_btn.grid(row=1,column=2,padx=10,pady=10)
root.mainloop()
#Show file dialog
def show_dialog(self,path_box):
file_type = [('csv text','*.csv')]
folder_place = 'C:\\pg'
file_path = filedialog.askopenfilename(filetypes = file_type, initialdir = folder_place)
#If you don't press the cancel button
if len(file_path) > 0 :
path_box.delete(0,tk.END)
path_box.insert(tk.END,file_path)
#Display csv data.
def execute_button(self,path_box):
except_list = []
with open(path_box,mode='r') as f:
read_file = csv.reader(f)
list_data = [row for row in read_file]
print(list_data)
return list_data
class Dialog_directory_screen(Dialog_menu_screen):
#Show folder dialog
def show_dialog(self,path_box):
folder_place = 'C:\\pg'
folder_path = filedialog.askdirectory(initialdir = folder_place)
#If you don't press the cancel button
if len(folder_path) > 0 :
path_box.delete(0,tk.END)
path_box.insert(tk.END,folder_path)
def execute_button(self,path_box):
print(os.listdir(path_box))
if __name__ =="__main__":
screen_title = "read csv"
screen_size = "500x90"
path_label = "File location:"
dialog_btn = 'File location...'
start_btn = 'Run'
csv_instance = Dialog_menu_screen(screen_title,screen_size,path_label,dialog_btn,start_btn)
csv_instance.show_main_screen()
screen_title = "Browse folder contents"
directry_instance = Dialog_directory_screen(screen_title,screen_size,path_label,dialog_btn,start_btn)
directry_instance.show_main_screen()
that's all.
Recommended Posts