如何调用导入模块中主代码的功能?
How to call function of main code in an Imported module?
引入的模块可以让主模块调用函数吗?
我创建了一个 sequence diagram 并且我有一个准系统代码示例来说明我的意思:
主要内容:
import test2
def function():
do sth
测试2:
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()
执行此操作的方法是设计导入代码,以便仅导入对象(函数、classes、常量)而不是 运行 代码。然后,一旦有了函数或 classes,就可以将其他函数或对象传递给它们。
例如,考虑这个 main.py:
import test2
def function():
do sth
test2.create_gui(function)
test2.py 可能看起来像这样:
def create_gui(func):
window = tk.Tk()
test = tk.Button(master = window, text = "hdsd", command = func)
test.grid(row = 0, column = 0)
window.mainloop()
可以说,更好的解决方案是对 main.py 和 [=39 中的代码都使用 classes =]。通过将所有功能添加到 class,您可以传递一个实例,您的 GUI 将可以访问所有功能。
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()
引入的模块可以让主模块调用函数吗? 我创建了一个 sequence diagram 并且我有一个准系统代码示例来说明我的意思:
主要内容:
import test2
def function():
do sth
测试2:
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()
执行此操作的方法是设计导入代码,以便仅导入对象(函数、classes、常量)而不是 运行 代码。然后,一旦有了函数或 classes,就可以将其他函数或对象传递给它们。
例如,考虑这个 main.py:
import test2
def function():
do sth
test2.create_gui(function)
test2.py 可能看起来像这样:
def create_gui(func):
window = tk.Tk()
test = tk.Button(master = window, text = "hdsd", command = func)
test.grid(row = 0, column = 0)
window.mainloop()
可以说,更好的解决方案是对 main.py 和 [=39 中的代码都使用 classes =]。通过将所有功能添加到 class,您可以传递一个实例,您的 GUI 将可以访问所有功能。
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()