通过运行主模块1中的函数将模块2(python文件)导入主模块1时出现问题

通过运行主模块1中的函数将模块2(python文件)导入主模块1时出现问题,python,import,python-module,Python,Import,Python Module,只有在按下main1中的按钮调用函数时,我才需要从module1导入并运行脚本。但它不起作用。 如果我在main1模块脚本顶部的main1模块中导入module1,则导入工作正常。但是我希望导入应该从函数开始。 另外,我需要导入的模块1应该在它的工作完成后卸载,程序应该返回main1模块 两个模块(python文件)都位于同一文件夹中,其中包含空的\uuuu init\uuuu.py文件 主模块的代码 导入系统 从PyQt5.QtWidgets导入* 从PyQt5.QtWidgets导入QA

只有在按下main1中的按钮调用函数时,我才需要从module1导入并运行脚本。但它不起作用。 如果我在main1模块脚本顶部的main1模块中导入module1,则导入工作正常。但是我希望导入应该从函数开始。 另外,我需要导入的模块1应该在它的工作完成后卸载,程序应该返回main1模块

两个模块(python文件)都位于同一文件夹中,其中包含空的
\uuuu init\uuuu.py
文件


主模块的代码


导入系统 从PyQt5.QtWidgets导入* 从PyQt5.QtWidgets导入QApplication、QWidget、QPushButton #导入模块1#此导入代码有效,但我需要它 #仅在#导入#但被按下时工作 类窗口(QWidget): 定义初始化(自): QWidget.\uuuuu初始化(自) app=QApplication(sys.argv) def窗口(): 全球widget6 widget6=QWidget() widget6.setGeometry(1001501300800) widget6.setHidden(False) 全局起始帧 开始帧=QFrame(widget6) 开始帧设置几何体(5、5、1300、800) start_frame.setStyleSheet(“QFrame{font size:13pt;}”) 开始帧设置隐藏(错误) 全球进口 导入但=QPushButton(开始帧) 导入_but.setGeometry(105020020080) 导入但.setHidden(False) import_but.setStyleSheet(“QPushButton{font size:12pt;}”) import_but.setText(“导入模块1”) 导入但按。连接(导入但按) def import_但_按下():#此函数不起作用 导入模块1 app.exec() #如果_uname _uu=='main1': 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 窗口() sys.exit(app.exec_())
模块1的代码


导入系统 从PyQt5.QtWidgets导入QApplication、QWidget、QPushButton、QListView 类窗口(QWidget): 定义初始化(自): QWidget.\uuuuu初始化(自) app=QApplication(sys.argv) def窗口(): 全局小部件 widget=QWidget() widget.setGeometry(1001501300800) widget.setHidden(False) w_list=QListView(小部件) w_list.setStyleSheet(“QListView{font size:12pt;}”) w_列表设置几何体(30、30、250、300) w_list.setHidden(False) m_list=QListView(小部件) m_列表。集合几何(30400250300) m_list.setStyleSheet(“QListView{font size:12pt;}”) m_list.setHidden(False) button2=QPushButton(小部件) 按钮2.setText(“完成”) 按钮2.设置几何图形(1100、600、150、150) button2.setStyleSheet(“QPushButton{font size:12pt;}”) 按钮2.setHidden(假) def按钮2U按下() widget.close() #这里必须放置返回main1.py的代码 按钮2.按下。连接(按钮2\u按下) app.exec() 如果_uname _uu=='module1': #如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 窗口() sys.exit(app.exec_())
欢迎任何形式的帮助和支持!谢谢大家!

好吧,导入工作正常。发生的情况是,您正在将模块导入函数import\u的本地范围,但按下了。因此,一旦您退出函数,导入就会消失,因为您超出了范围。导入仅限于函数内部

但是,您可以做的是:

def import_but_pressed():
    globals()["modul1"] = __import__("modul1")

这会将函数导入全局范围。

请尝试以下代码以获得一点提示:

import sys 

def foo():
    import itertools #import module, for example the module itertools
    print([x for x in itertools.permutations(range(3))]) #arbitrary to show itertools imported
    del sys.modules['itertools'] #unload module by removing reference 

def foo_without_del():
    import itertools
    print([x for x in itertools.permutations(range(3))])

print('itertools' in sys.modules) #return False
foo() #lazy import
print('itertools' in sys.modules) #return False
foo_without_del()
print('itertools' in sys.modules) #return True
有关模块的卸载,请参阅

您还可以使用以编程方式导入