[Python] Splitting python program into GUI top and sub-modules

Discussão em 'Python' iniciado por Stack, Março 21, 2025.

  1. Stack

    Stack Membro Participativo

    Basic question on hierarchy:

    I have a simple top level GUI with no functionality, 2 each of just labels, entry boxes & buttons in 2 separate frames, but want the functionality to be added from a sub-folder called "modules" and I import the functions with "import modules.func01" The modules folder has the (empty) init.py and the func_01.py files

    Is it possible to do this, that is, declare the button without a command and add the command with a config statement in the func_01 file?

    I'm getting error that the button is not defined.

    My project is to build a GUI with 6 or so frames, each frame to have several entry boxes for time, power etc, an add button for each frame, then an overall "build" button that takes the data that has been added from all the frames and writes out a file from the entered data after some manipulation etc. I'd like to keep the GUI as one file and the functions for each frame in separate files etc.

    NOTE: I have successfully built the project as one big file (not ideal, but I learned a lot doing it, but now to do it better), but that makes updates & maintenance not so easy.

    Any advice/help is appreciated.

    # GUI.py top level file

    import tkinter as tk
    import modules.func_01

    root = tk.Tk()
    root.geometry("700x500")
    #root.resizable(False, False)
    root.title("Test GUI only top file.")

    frame_01 = tk.Frame(root, relief="ridge", bd=4, padx=5,pady=5)
    frame_02 = tk.Frame(root, relief="ridge", bd=4, padx=5,pady=5)
    frame_03 = tk.Frame(root, relief="ridge", bd=4, padx=5,pady=5)

    frame_01.grid(row=0, column=0)
    frame_02.grid(row=1, column=1)
    frame_03.grid(row=2, column=0, columnspan=2)


    label_01 = tk.Label(frame_01, text = "Frame_01, Enter text below!").grid(row=0, column=0)
    label_02 = tk.Label(frame_02, text = "Frame_02, Enter text below!").grid(row=0, column=0)

    ent_01 = tk.Entry(frame_01, width = 20).grid(row=1, column=0)
    ent_02 = tk.Entry(frame_02, width = 30).grid(row=1, column=0)

    but_01 = tk.Button(frame_01, text="Press me No 1 (Entry t0 text box).").grid(row=2, column=0)
    but_02 = tk.Button(frame_02, text="Press me No 2 (Entry t0 text box).").grid(row=2, column=0)

    text_box = tk.Text(frame_03, height = 15, width = 60, padx=10,pady=10).grid(row=0, column=0)

    root.mainloop()


    # func_01.py file in modules sub-folder
    def get_display_ent_01():
    # get the text from entry 01 in frame_01:
    # display in the fetched text in frame_03 text box
    # code not yet written
    pass

    but_01.config(command = get_and_display_ent_01)


    This does not work. Is what I'm trying possible? If you hadn't guessed, I'm a bit of a python newbie.

    Continue reading...

Compartilhe esta Página