这里是我的QT码函数指针
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QTime
from PyQt4.QtGui import QApplication
from keithley.PS2231A import PS2231A
class A(QtGui.QMainWindow, gui.Ui_MainWindow):
def __init__(self, parent=None):
super(A, self).__init__(parent)
self.setupUi(self)
ps = PS2231A(port='COM8')
self.refresh.clicked.connect(self.get_data)
def get_data(self):
data = ps.read_current()
self.current_measurement.setText(str(data))
def main():
app = QtGui.QApplication([])
form = A()
form.show()
app.exec()
if __name__ == '__main__':
main()
现在,这里是我的PS2231A库
class PS2231A:
def __init__(self, port: str):
self._port = port
self._dev = serial.Serial()
self._dev.port = self._port
self._dev.timeout = 5
self._dev.baudrate = 9600
self.connect()
self._dev.open()
def read_current(self):
self._dev.write('MEAS:CURR?')
current = self._dev.readline()
return float(current)
这里是我想什么来实现: 电源提供紧急消息像过流。它基本上是在没有任何命令请求数据的情况下将该消息写入串行端口。一旦收到该消息,我想要改变GUI。
范围: 在这里,我正在为PS2231A编写库,用户将围绕它编写一个GUI。我希望库方解决方案将消息传播到GUI,这里是我的设想:
步骤1:创建PS2231A的对象时,启动一个线程,它将读取串口(轮询它)消息。一旦紧急消息被读取,它就调用库中的一个函数。 步骤2:线程调用的函数应该执行用户想要的任何函数,即如果用户想要将GUI背景变为红色,用户将代码写入名为turn_background_red的函数,并将函数名称传递给库函数。然后,只要紧急消息被调用,库函数就会执行代码。
我认为下面的代码会解释这口井(我希望这样的事情发生,所以一些代码将无法正常工作):
QT码
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QTime
from PyQt4.QtGui import QApplication
from keithley.PS2231A import PS2231A
class A(QtGui.QMainWindow, gui.Ui_MainWindow):
def __init__(self, parent=None):
super(A, self).__init__(parent)
self.setupUi(self)
ps = PS2231A(port='COM8')
ps.set_over_current_callback(self.warn_user)
self.refresh.clicked.connect(self.get_data)
def warn_user(self):
# manipulate some GUI element
# implemented by user
def get_data(self):
data = ps.read_current()
self.current_measurement.setText(str(data))
def main():
app = QtGui.QApplication([])
form = A()
form.show()
app.exec()
if __name__ == '__main__':
main()
类代码实现
class PS2231A:
def __init__(self, port: str):
self._port = port
self._dev = serial.Serial()
self._dev.port = self._port
self._dev.timeout = 5
self._dev.baudrate = 9600
self.connect()
self._dev.open()
def read_current(self):
self._dev.write('MEAS:CURR?')
current = self._dev.readline()
return float(current)
def set_over_current_callback(self, function_name):
# write some code to run the function name passed to this function
# This is the code I am not sure how to go ahead with
# This function will be executed if an emergency message is received
# on serial port
我在考虑这个问题时遇到的一些关键挑战是要执行的功能处于不同的阶级。
如果您意识到您的问题在初稿中不明确,您实际上不必*发布问题。只要继续编辑,直到您认为它已经清晰并准备好阅读。 –
显示代码请输入有效的电话号码。这是模糊的,你基本上要求我们为你写这个项目。 –
但是,在这一点上,您的帖子中实际上并没有* concreate,actionable question *。 Stack Overflow并不适合模糊的架构头脑风暴问题,对不起。 –