這裏是我的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並不適合模糊的架構頭腦風暴問題,對不起。 –