Oct-05-2023, 03:44 AM
(Oct-03-2023, 01:48 PM)deanhystad Wrote: I would do it like this:Thanks for thee advices. I will probably change to oop affter Im finished without oop :)
import tkinter as tk import customtkinter as ctk class OverlayWindow(tk.Toplevel): def __init__(self, overlay_file): self.overlay_file = overlay_file super().__init__() self.geometry("1000x1000") self.resizable(False, False) self.overrideredirect(True) tk.Button(self, text="Submit", command=self.loading).place(x=45,y=1140) def loadimg(self): """Set overlay image""" photo = tk.PhotoImage(file=self.overlay_file.get().strip()) image_label = tk.Label(self, image=photo) image_label.photo = photo image_label.place(x=0, y=0) class MainWindow(tk.Tk): def __init__(self): super().__init__() self.geometry("1920x1200+0+0") self.minsize(1920, 1200) self.resizable(False, False) self.overrideredirect(True) self.attributes('-topmost',True) self.overlay_file = tk.StringVar() ctk.CTkEntry( self, textvariable=self.overlay_file, width=360, font=("Ariel", 14, "bold"), placeholder_text="Sti til bilde 1 som skal behandles.(d:/bilde/abc.png)", justify=("left")).place(x=12,y=1010) window = MainWindow() top = OverlayWindow(window.overlay_file)If there are several values that top needs to get from window, I pass window to top, and use that to reference the values.
class OverlayWindow(tk.Toplevel): def __init__(self, main_window): self.main_window = main_window super().__init__() self.geometry("1000x1000") self.resizable(False, False) self.overrideredirect(True) tk.Button(self, text="Submit", command=self.loading).place(x=45,y=1140) def loadimg(self): """Set overlay image""" photo = tk.PhotoImage(file=self.main_window.overlay.get().strip()) image_label = tk.Label(self, image=photo) image_label.photo = photo image_label.place(x=0, y=0)Another approach is to make a data model that is used by both windows. Think of it as a blackboard that both windows can read and write.
import tkinter as tk import customtkinter as ctk class ApplicationData(): """I have all data shared between the main and overlay window.""" def __init__(self): self.overlay_file = tk.StringVar() # additional shared vaiables go here class OverlayWindow(tk.Toplevel): def __init__(self, data): self.data = data super().__init__() self.geometry("1000x1000") self.resizable(False, False) self.overrideredirect(True) tk.Button(self, text="Submit", command=self.loading).place(x=45,y=1140) def loadimg(self): """Set overlay image""" photo = tk.PhotoImage(file=self.data.overlay_file.get().strip()) image_label = tk.Label(self, image=photo) image_label.photo = photo image_label.place(x=0, y=0) class MainWindow(tk.Tk): def __init__(self, data): super().__init__() self.geometry("1920x1200+0+0") self.minsize(1920, 1200) self.resizable(False, False) self.overrideredirect(True) self.attributes('-topmost',True) ctk.CTkEntry( self, textvariable=self.data.overlay_file, width=360, font=("Ariel", 14, "bold"), placeholder_text="Sti til bilde 1 som skal behandles.(d:/bilde/abc.png)", justify=("left")).place(x=12,y=1010) data = ApplicationData() window = MainWindow(data) top = OverlayWindow(data)You should start studying Python classes. There is a reason that tkinter and customtkinter use classes. It is hard to write good looking GUI code without them.