gui-host-lookup/tkinter-example-passing-variables-between-windows-3.py

70 lines
1.9 KiB
Python

# https://stackoverflow.com/questions/70614386/passing-values-tkinter-elements-between-classes-in-tkinter
import os
import tkinter as tk
from tkinter import filedialog
class MainFrame:
def __init__(self, master):
self.file_selection = FileSelect(master, main=self)
self.file_load = LoadFiles(master, main=self)
class FileSelect:
def __init__(self, master, main):
self.main = main
self.files = []
# Frame
self.frame = tk.LabelFrame(master, text="File Selection")
self.frame.grid(row=0, column=0)
# Select directory button
tk.Button(self.frame, text="Open:", command=self.directory_path).grid(
row=0, column=0
)
# Directory Selection
def directory_path(self):
# Select filepath
directory = filedialog.askdirectory(initialdir="/", title="Select a directory")
os.chdir(directory)
# Populate list of files
for tb in os.listdir(directory):
self.files.append(tb)
# Update GUI, activate button in different class if condition met
if len(os.listdir(directory)) == 0:
self.main.file_load.import_files_button["state"] = tk.DISABLED
else:
self.main.file_load.import_files_button["state"] = tk.NORMAL
class LoadFiles:
def __init__(self, master, main):
self.main = main
# Frame
self.frame = tk.LabelFrame(master, text="File loading")
self.frame.grid(row=1, column=0)
# Load button
self.import_files_button = tk.Button(
self.frame, text="Import TB", command=self.print_files, state=tk.DISABLED
)
self.import_files_button.grid(row=0, column=0, sticky="EW")
# Tkinter Elements...
def print_files(self):
print(self.main.file_selection.files)
if __name__ == "__main__":
root = tk.Tk()
MainFrame(root)
root.mainloop()