PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Saturday, November 26, 2022

[FIXED] How to call function of main code in an Imported module?

 November 26, 2022     class, function, import, module, python     No comments   

Issue

Can an imported module make the Main module call a function? I created a sequence diagram and I have a barebones code example of what I mean:

main:

import test2

def function():
    do sth

test2:

import tkinter as tk

window  = tk.Tk()
test = tk.Button(master = window, text = "hdsd", command = # call function of main program)
test.grid(row = 0, column = 0)
window.mainloop()

Solution

The way to do this is to design your imported code so that you are only importing objects (functions, classes, constants) and not running code. Then, once you have functions or classes, you can pass other functions or objects to them.

For example, consider this main.py:

import test2
def function():
    do sth
test2.create_gui(function)

test2.py might then look like this:

def create_gui(func):
    window  = tk.Tk()
    test = tk.Button(master = window, text = "hdsd", command = func)
    test.grid(row = 0, column = 0)
    window.mainloop()

Arguably, a better solution is to use classes, both for the code in main.py and in test2.py. By adding all of the functions into a class, you can pass one instance and your GUI will have access to all of the functions.

main.py

from test2 import GUI
class Main():
    def __init__(self):
        self.gui = GUI(self)

    def function(self):
        do sth

    def another_function(self):
        do sth

if __name__ == "__main__":
    main = Main()
    main.gui.start()

test2.py

import tkinter as tk
class GUI(tk.Tk):
    def __init__(self, main):
        super().__init__()
        test1 = tk.Button(self, text="hdsd", command=main.function)
        test2 = tk.Button(self, text="sdhd", command=main.another_function)

        test1.grid(row=0, column=0)
        test2.grid(row=0, column=1)

    def start(self):
        self.mainloop()


Answered By - Bryan Oakley
Answer Checked By - David Marino (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing