diff --git a/tkinter-example-enter.py b/tkinter-example-enter.py new file mode 100644 index 0000000..f126ff7 --- /dev/null +++ b/tkinter-example-enter.py @@ -0,0 +1,30 @@ +import tkinter as tk + +class Demo1: + def __init__(self, master): + self.master = master + self.frame = tk.Frame(self.master) + self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window) + self.button1.pack() + self.frame.pack() + def new_window(self): + self.newWindow = tk.Toplevel(self.master) + self.app = Demo2(self.newWindow) + +class Demo2: + def __init__(self, master): + self.master = master + self.frame = tk.Frame(self.master) + self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows) + self.quitButton.pack() + self.frame.pack() + def close_windows(self): + self.master.destroy() + +def main(): + root = tk.Tk() + app = Demo1(root) + root.mainloop() + +if __name__ == '__main__': + main() diff --git a/tkinter-example-oop-1.py b/tkinter-example-oop-1.py new file mode 100644 index 0000000..7a60213 --- /dev/null +++ b/tkinter-example-oop-1.py @@ -0,0 +1,31 @@ +# From: https://www.pythontutorial.net/tkinter/tkinter-object-oriented-window/ + +import tkinter as tk +from tkinter import ttk +from tkinter.messagebox import showinfo + +class App(tk.Tk): + def __init__(self): + super().__init__() + + self.title('test') + self.geometry('300x50') + self.resizable(0,0) + self.columnconfigure(0, weight=1) + self.columnconfigure(1, weight=1) + self.columnconfigure(2, weight=1) + self.columnconfigure(3, weight=1) + + self.label = ttk.Label(self, text='testing label') + self.label.grid(column=1, row=0, columnspan=2, sticky='nsew') + + self.button = ttk.Button(self, text='testing button') + self.button['command'] = self.button_clicked + self.button.grid(column=1, row=1, columnspan=2, sticky='nsew') + + def button_clicked(self): + showinfo(title='Information', message='testing button method') + +if __name__ == "__main__": + app = App() + app.mainloop() diff --git a/tkinter-example-oop-2.py b/tkinter-example-oop-2.py new file mode 100644 index 0000000..4c7a1a6 --- /dev/null +++ b/tkinter-example-oop-2.py @@ -0,0 +1,97 @@ +# from: https://www.pythontutorial.net/tkinter/tkinter-object-oriented-frame/ + +import tkinter as tk +from tkinter import ttk + + +class InputFrame(ttk.Frame): + def __init__(self, container): + super().__init__(container) + # setup the grid layout manager + self.columnconfigure(0, weight=1) + self.columnconfigure(0, weight=3) + + self.__create_widgets() + + def __create_widgets(self): + # Find what + ttk.Label(self, text="Find what:").grid(column=0, row=0, sticky=tk.W) + keyword = ttk.Entry(self, width=30) + keyword.focus() + keyword.grid(column=1, row=0, sticky=tk.W) + + # Replace with: + ttk.Label(self, text="Replace with:").grid(column=0, row=1, sticky=tk.W) + replacement = ttk.Entry(self, width=30) + replacement.grid(column=1, row=1, sticky=tk.W) + + # Match Case checkbox + match_case = tk.StringVar() + match_case_check = ttk.Checkbutton( + self, + text="Match case", + variable=match_case, + command=lambda: print(match_case.get()), + ) + match_case_check.grid(column=0, row=2, sticky=tk.W) + + # Wrap Around checkbox + wrap_around = tk.StringVar() + wrap_around_check = ttk.Checkbutton( + self, + variable=wrap_around, + text="Wrap around", + command=lambda: print(wrap_around.get()), + ) + wrap_around_check.grid(column=0, row=3, sticky=tk.W) + + for widget in self.winfo_children(): + widget.grid(padx=0, pady=5) + + +class ButtonFrame(ttk.Frame): + def __init__(self, container): + super().__init__(container) + # setup the grid layout manager + self.columnconfigure(0, weight=1) + + self.__create_widgets() + + def __create_widgets(self): + ttk.Button(self, text="Find Next").grid(column=0, row=0) + ttk.Button(self, text="Replace").grid(column=0, row=1) + ttk.Button(self, text="Replace All").grid(column=0, row=2) + ttk.Button(self, text="Cancel").grid(column=0, row=3) + + for widget in self.winfo_children(): + widget.grid(padx=0, pady=3) + + +class App(tk.Tk): + def __init__(self): + super().__init__() + self.title("Replace") + self.geometry("400x150") + self.resizable(0, 0) + # windows only (remove the minimize/maximize button) + # self.attributes('-toolwindow', True) + + # layout on the root window + self.columnconfigure(0, weight=4) + self.columnconfigure(1, weight=1) + + self.__create_widgets() + + def __create_widgets(self): + # create the input frame + input_frame = InputFrame(self) + input_frame.grid(column=0, row=0) + + # create the button frame + button_frame = ButtonFrame(self) + button_frame.grid(column=1, row=0) + + +if __name__ == "__main__": + app = App() + app.mainloop() diff --git a/tkinter-example-passing-variables-between-windows-2.py b/tkinter-example-passing-variables-between-windows-2.py new file mode 100644 index 0000000..613fb4b --- /dev/null +++ b/tkinter-example-passing-variables-between-windows-2.py @@ -0,0 +1,27 @@ +import tkinter as tk + + +class Application(tk.Frame): + def __init__(self): + self.root = tk.Tk() + self.root.geometry("300x200") + + tk.Frame.__init__(self, self.root) + self.create_widgets() + + def create_widgets(self): + self.root.bind("", self.parse) + self.grid() + + self.submit = tk.Button(self, text="Submit") + self.submit.bind("", self.parse) + self.submit.grid() + + def parse(self, event): + print("You clicked?") + + def start(self): + self.root.mainloop() + + +Application().start() diff --git a/tkinter-example-passing-variables-between-windows-3.py b/tkinter-example-passing-variables-between-windows-3.py new file mode 100644 index 0000000..d582001 --- /dev/null +++ b/tkinter-example-passing-variables-between-windows-3.py @@ -0,0 +1,69 @@ +# 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() diff --git a/tkinter-example-passing-variables-between-windows.py b/tkinter-example-passing-variables-between-windows.py new file mode 100644 index 0000000..8b1eab1 --- /dev/null +++ b/tkinter-example-passing-variables-between-windows.py @@ -0,0 +1,82 @@ +import os +import tkinter as tk +from tkinter import filedialog + + +class MainFrame: + + def __init__(self, master): + self.master = master + + # Variables + self.file_list = [] # Files list + self.import_state = tk.DISABLED # Enable import on correct fp + + # Class Frames + FileSelect(master, self.file_list, self.import_state) + LoadFiles(master, self.file_list, self.import_state) + + +class FileSelect: + + def __init__(self, master, files, button_state): + self.files = files + self.button_state = button_state + + # 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 + ) + + # Tkinter Elements... + + # 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: + # Update GUI Labels... + self.button_state = tk.DISABLED + print(self.files, self.button_state) + elif len(self.files) == len(os.listdir(directory)): + # Update GUI Labels... + self.button_state = tk.NORMAL + print(self.files, self.button_state) + + +class LoadFiles: + def __init__(self, master, files, button_state): + self.files = files + self.button_state = button_state + + # 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 + ) + self.import_files_button.grid(row=0, column=0, sticky="EW") + + # Tkinter Elements... + + def print_files(self): + print(self.files, self.button_state) + + +if __name__ == "__main__": + root = tk.Tk() + MainFrame(root) + root.mainloop()