I have a situation where a user has stored video data in different file paths. The number of these file paths can vary.
I've created a dropdown menu where the user can select how many file paths they want to select (e.g. 1 to 8).
When they select the appropriate number of file paths, I've created corresponding buttons with which they can select the folder for each of those paths.
Where I'm stuck is that, while the buttons will generate a folder prompt, I want to: 1. display that file path selection next to the appropriate button and 2. store the selections in a list/dictionary and use that information later.
I've successfully:
- created the GUI interface.
- set up the initial dropdown (with which to select the number of desired file paths)
- When the number of file paths is selected, the corresponding buttons will populate on the GUI
- when you click a button, the file dialog box, prompting you to select the file path populates
Where I'm stuck is, I can't display the selection on the GUI next to the appropriate button. And then, even when I do that, I'm not sure how to save those selections in a list/dictionary and then extract them later.
I'm lost on how to associate the function to open the file path selection GUI in a for loop. Or if that's the best way?
When I select a single button, I also have to open the folder equal to how many cameras I've selected. I just want to have x buttons, click it once, and assign the selected folder next to it.
Here's what I've done:
import tkinter as tk
from tkinter import ttk, StringVar, filedialog, OptionMenu
def main():
# Create a GUI to select the number of video folders
# root window
root = tk.Tk()
root.geometry("1200x500")
root.resizable(True, True)
root.title("Assign Videos")
class AssignVideos:
def __init__(self, master):
"""initializes the GUI with a dropdown to select the number of video cameras.
The selection will then create an equal number of prompts to select where the data
for each camera is stored"""
# Header to select the number of reference video cameras
self.number_of_cams_selection_header = ttk.Label(
text="Number of Videos:"
)
self.number_of_cams_selection_header.grid(column=0, row=0)
# Create an option menu with which to select the number of reference video cameras
self.select_number_of_cams = OptionMenu(
root,
StringVar(root, value=" "),
*[str(num) for num in range(1, 9)],
command=self.create_inputs,
)
self.select_number_of_cams.grid(column=1, row=0)
# Define variables that are going to be used later
self.number_of_cams = int
self.folder_path_label = {}
self.folder_path_button = {}
self.folder_path = {}
self.folder_path_selection = ttk.Label
def create_inputs(self, _):
"""Generates the equal number of folder selection inputs for the user to select the location of the VVIDs"""
self.number_of_cams = int(self.select_number_of_cams["text"])
for num in range(self.number_of_cams):
# Creates the label to select the folder path
self.folder_path_button[num] = ttk.Button(
root,
text=f"Select the Folder for Camera # " f"{num + 1}: ",
command=self.select_folder,
)
self.folder_path_button[num].grid(column=1, row=num + 1)
def select_folder(self):
"""Places Buttons on the screen to select the folder"""
for num in range(self.number_of_cams):
self.folder_path_selection = ttk.Button(root, text=filedialog.askdirectory())
self.folder_path[num] = ttk.Label(root, text=self.folder_path_selection['text'])
self.folder_path[num].grid(column=2, row=1)
_ = AssignVideos(root)
root.mainloop()
if __name__ == "__main__":
main()