pyqt5窗体与外模块交换数据
pyqt5 form and outer module exchange data
我有一个 Pyqt5 表单,用户可以在其中输入数据。此数据被发送到另一个模块,在那里进行处理和 returned 以便在表单中显示。
非常简单地看起来像这样:
frm.py
import sys
from PyQt5.QtWidgets import *
import mdl
def fnc0(in_val):
mdl.fnc1(in_val)
def fnc2(rezult):
msg.setText(rezult)
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
btn = QPushButton('button')
btn.clicked.connect(lambda: fnc0(5))
layout.addWidget(btn)
msg = QLabel('')
layout.addWidget(msg)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
mdl.py
import frm
def fnc1(in_val):
out_val = str(in_val*2)
frm.fnc2(out_val)
但是,在执行此操作时,出现使用循环模块的错误:
AttributeError: partially initialized module 'mdl' has no attribute 'fnc1' (most likely due to a circular import)
是否可以将表单发送的数据处理到另一个模块,然后return将结果发送到表单?
一个可能的解决方案是在第三个文件中创建一个逻辑,我们可以在其中注册接收结果的函数和调用这些函数的函数:
core.py
_funct = []
def register_writer(func):
_funct.append(func)
return func
def write(text):
for f in _funct:
f(text)
mdl.py
import core
def fnc1(in_val):
out_val = str(in_val * 2)
core.write(out_val)
frm.py
import sys
from PyQt5.QtWidgets import *
import core
import mdl
@core.register_writer
def fnc2(rezult):
msg.setText(rezult)
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
btn = QPushButton("button")
btn.clicked.connect(lambda: mdl.fnc1(5))
layout.addWidget(btn)
msg = QLabel()
layout.addWidget(msg)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
我有一个 Pyqt5 表单,用户可以在其中输入数据。此数据被发送到另一个模块,在那里进行处理和 returned 以便在表单中显示。
非常简单地看起来像这样:
frm.py
import sys
from PyQt5.QtWidgets import *
import mdl
def fnc0(in_val):
mdl.fnc1(in_val)
def fnc2(rezult):
msg.setText(rezult)
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
btn = QPushButton('button')
btn.clicked.connect(lambda: fnc0(5))
layout.addWidget(btn)
msg = QLabel('')
layout.addWidget(msg)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
mdl.py
import frm
def fnc1(in_val):
out_val = str(in_val*2)
frm.fnc2(out_val)
但是,在执行此操作时,出现使用循环模块的错误:
AttributeError: partially initialized module 'mdl' has no attribute 'fnc1' (most likely due to a circular import)
是否可以将表单发送的数据处理到另一个模块,然后return将结果发送到表单?
一个可能的解决方案是在第三个文件中创建一个逻辑,我们可以在其中注册接收结果的函数和调用这些函数的函数:
core.py
_funct = []
def register_writer(func):
_funct.append(func)
return func
def write(text):
for f in _funct:
f(text)
mdl.py
import core
def fnc1(in_val):
out_val = str(in_val * 2)
core.write(out_val)
frm.py
import sys
from PyQt5.QtWidgets import *
import core
import mdl
@core.register_writer
def fnc2(rezult):
msg.setText(rezult)
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
btn = QPushButton("button")
btn.clicked.connect(lambda: mdl.fnc1(5))
layout.addWidget(btn)
msg = QLabel()
layout.addWidget(msg)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())