我正在制作一个可处理.py文件的插件系统。当我使用该插件(.py文件)执行exec()并且它具有函数或变量时,会给出NameError。
NameError:名称'editor_nf'未定义
我已经用Google搜索了,但是没有找到任何对我有帮助的东西。
我只做过
plugin = open("plugin.py","r").read()
exec(plugin)
,plugin.py文件为:
import tkinter as tk
def editor_nf():
enf = tk.Tk()
enf.title("New file")
enf.config(bg="white")
enf.geometry("500x500")
enf.mainloop()
def editor():
editor = tk.Tk()
editor.title("Website Editor")
editor.config(bg="white")
editor.geometry("1400x700")
editor_nf_btn = tk.Button(editor,text="New file",bg="gray",fg="black",font="Arial",command=editor_nf)
editor_nf_btn.grid(row=0,column=0)
editor.mainloop()
editor()
所以我希望它可以与函数一起使用,以便人们可以创建WORKING函数。
我不希望它显示:
NameError:名称'editor_nf'未定义
答案 0 :(得分:0)
让我举一个简单的例子,说明我在评论中告诉您的内容。这是我的文件夹结构:
/sample
- plugins/
- __init__.py # not necessary, but maybe you want to apply some logic
# before importing the plugins
- plugin1.py
- plugin2.py
- plugin3.py
- __init__.py
- test.py
每个插件都会打印出什么插件(例如print('plugin 1')
)。 test.py
如下:
import os
if __name__ == '__main__':
# load plugins
plugins = [p for p in os.listdir('plugins') if not p.startswith('_')]
for p in plugins:
__import__('plugins.'+p[:-3])
输出为:
plugin 1
plugin 2
plugin 3
这意味着我已使用__import__
成功导入了所有这些模块(插件)。请注意,__import__
返回对导入模块的引用,因此您可以将其存储以备后用。希望对您有帮助!
答案 1 :(得分:0)
我说我用错误和内容编辑了它,但是我自己修复了它。感谢您的帮助!