使用 pyqt5 制作 GUI(来自我的传感器的数据)
Making a GUI using pyqt5 (data from my sensor)
我这周才开始试用 python,我急需一些帮助(请不要评判我,请善待嘿嘿)我有一个传感器(X4M300 存在传感器),我需要显示数据使用 python 在 GUI 中从中获取。我已经安装了pyqt5和qt designer。
首先,我有一个 python 脚本,我可以在其中打印出传感器的信息,如版本、固件 ID、序列号等。此处:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" \example X4M200_X4M300_printout_infromation.py
#Target module: X4M200,X4M300
#Introduction: This is an example of how to use the XEP interface from python to get module infromation.
#Command to run: "python X4M200_X4M300_printout_infromation.py -d com8" or "python3 X4M200_X4M300_printout_infromation.py -d com8"
Using TCP server address as device name is also supported, e.g.
"python X4M200_sleep_record.py -d tcp://192.168.1.169:3000".
"""
from __future__ import print_function
import pymoduleconnector
from pymoduleconnector import ModuleConnector
from pymoduleconnector.ids import *
from optparse import OptionParser
import sys
import time
def try_xep(device_name):
log_level = 0
mc = ModuleConnector(device_name, log_level)
x4m300 = mc.get_x4m300()
# we have to go to manual mode
x4m300.set_sensor_mode(XTS_SM_STOP, 0)
x4m300.set_sensor_mode(XTS_SM_MANUAL, 0);
xep = mc.get_xep()
pong = xep.ping()
print("Received pong:", hex(pong))
print('ItemNumber =', xep.get_system_info(XTID_SSIC_ITEMNUMBER));
print('OrderCode =', xep.get_system_info(XTID_SSIC_ORDERCODE));
print('FirmWareID =', xep.get_system_info(XTID_SSIC_FIRMWAREID));
print('Version =', xep.get_system_info(XTID_SSIC_VERSION));
print('Build =', xep.get_system_info(XTID_SSIC_BUILD));
print('SerialNumber =', xep.get_system_info(XTID_SSIC_SERIALNUMBER));
print('VersionList =', xep.get_system_info(XTID_SSIC_VERSIONLIST));
# inti x4driver
xep.x4driver_init()
# Set enable pin
xep.x4driver_set_enable(1);
# Set iterations
xep.x4driver_set_iterations(16);
# Set pulses per step
xep.x4driver_set_pulses_per_step(256);
# Set dac min
xep.x4driver_set_dac_min(949);
# Set dac max
xep.x4driver_set_dac_max(1100);
# Set TX power
xep.x4driver_set_tx_power(2);
# Enable downconversion
xep.x4driver_set_downconversion(1);
# Set frame area offset
xep.x4driver_set_frame_area_offset(0.18)
offset = xep.x4driver_get_frame_area_offset()
print('x4driver_get_frame_area_offset returned: ', offset)
# Set frame area
xep.x4driver_set_frame_area(2,6)
frame_area = xep.x4driver_get_frame_area()
print('x4driver_get_frame_area returned: [', frame_area.start, ', ', frame_area.end, ']');
# Set TX center freq
xep.x4driver_set_tx_center_frequency(3);
# Set PRFdiv
xep.x4driver_set_prf_div(16)
prf_div = xep.x4driver_get_prf_div()
print('x4driver_get_prf_div returned: ', prf_div)
# Start streaming
xep.x4driver_set_fps(20)
fps = xep.x4driver_get_fps()
print('xep_x4driver_get_fps returned: ' ,fps)
# Wait 5 sec.
time.sleep(5)
# Stop streaming
xep.x4driver_set_fps(0);
# Read data float if available.
if xep.peek_message_data_float() > 0:
data_float = xep.read_message_data_float()
else:
print('No data float messages available.')
# Reset module
xep.module_reset()
def main():
parser = OptionParser()
parser.add_option(
"-d",
"--device",
dest="device_name",
help="device file to use",
metavar="FILE")
(options, args) = parser.parse_args()
if not options.device_name:
print("you have to specify device, e.g.: python %s -d /dev/ttyACM0" % sys.argv[0])
sys.exit(1)
try_xep(options.device_name)
if __name__ == "__main__":
main()
在 Qt Designer 中,我希望 GUI 看起来像这样:
在 Qt Designer 中创建的示例 GUI
到目前为止,这是我的 GUI 代码:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic
Ui_MainWindow, QtBaseClass = uic.loadUiType("x4m300gui1.ui")
class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.connect_button.clicked.connect(self.ConnectModule)
def ConnectModule(self):
itemnumber_string = ""
ordercode_string = ""
firmwareid_string = ""
version_string = ""
serialnumber_string = ""
self.ui.itemnumber_box.setText(itemnumber_string)
self.ui.ordercode_box.setText(ordercode_string)
self.ui.firmwareid_box.setText(firmwareid_string)
self.ui.version_box.setText(version_string)
self.ui.serialnumber_box.setText(serialnumber_string)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
我想知道如何在单击按钮后在 gui 中显示传感器信息 'connect_button'。我会感谢所有的帮助。非常感谢。
您似乎想从 ConnectModule
调用 try_xep
过程。有try_xep
return你要的信息,然后写进ui.
看起来您正在尝试 运行 传感器采样和 GUI 作为两个应用程序,它们需要命名管道或共享文件来访问彼此的内存。为简单起见,您应该 运行 将其作为单个应用程序。
我会采用 classic OOP 方法并制作一个 class 代表传感器
class X4M300():
def __init__(self, options):
# Initialise things required to sample sensor including the device options
# Also get the device information and store it in local variables
# Create a local variable that stores the sensor value
def get_sample():
# sequence of things required to trigger sensor to start sampling, get sample and save the value into the local variable, essentially the try_xep() method.
然后在 PyQt 应用程序的主要方法中创建一个传感器实例 class 并将选项作为参数传递。
sensor = X4M300(options)
然后你可以这样做:
def ConnectModule(self):
sensor.get_sample()
self.ui.itemnumber_box.setText(sensor.itemnumber)
self.ui.ordercode_box.setText(sensor.ordercode)
self.ui.firmwareid_box.setText(sensor.firmwareid)
self.ui.version_box.setText(sensor.version)
self.ui.serialnumber_box.setText(sensor.serialnumber)
我这周才开始试用 python,我急需一些帮助(请不要评判我,请善待嘿嘿)我有一个传感器(X4M300 存在传感器),我需要显示数据使用 python 在 GUI 中从中获取。我已经安装了pyqt5和qt designer。
首先,我有一个 python 脚本,我可以在其中打印出传感器的信息,如版本、固件 ID、序列号等。此处:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" \example X4M200_X4M300_printout_infromation.py
#Target module: X4M200,X4M300
#Introduction: This is an example of how to use the XEP interface from python to get module infromation.
#Command to run: "python X4M200_X4M300_printout_infromation.py -d com8" or "python3 X4M200_X4M300_printout_infromation.py -d com8"
Using TCP server address as device name is also supported, e.g.
"python X4M200_sleep_record.py -d tcp://192.168.1.169:3000".
"""
from __future__ import print_function
import pymoduleconnector
from pymoduleconnector import ModuleConnector
from pymoduleconnector.ids import *
from optparse import OptionParser
import sys
import time
def try_xep(device_name):
log_level = 0
mc = ModuleConnector(device_name, log_level)
x4m300 = mc.get_x4m300()
# we have to go to manual mode
x4m300.set_sensor_mode(XTS_SM_STOP, 0)
x4m300.set_sensor_mode(XTS_SM_MANUAL, 0);
xep = mc.get_xep()
pong = xep.ping()
print("Received pong:", hex(pong))
print('ItemNumber =', xep.get_system_info(XTID_SSIC_ITEMNUMBER));
print('OrderCode =', xep.get_system_info(XTID_SSIC_ORDERCODE));
print('FirmWareID =', xep.get_system_info(XTID_SSIC_FIRMWAREID));
print('Version =', xep.get_system_info(XTID_SSIC_VERSION));
print('Build =', xep.get_system_info(XTID_SSIC_BUILD));
print('SerialNumber =', xep.get_system_info(XTID_SSIC_SERIALNUMBER));
print('VersionList =', xep.get_system_info(XTID_SSIC_VERSIONLIST));
# inti x4driver
xep.x4driver_init()
# Set enable pin
xep.x4driver_set_enable(1);
# Set iterations
xep.x4driver_set_iterations(16);
# Set pulses per step
xep.x4driver_set_pulses_per_step(256);
# Set dac min
xep.x4driver_set_dac_min(949);
# Set dac max
xep.x4driver_set_dac_max(1100);
# Set TX power
xep.x4driver_set_tx_power(2);
# Enable downconversion
xep.x4driver_set_downconversion(1);
# Set frame area offset
xep.x4driver_set_frame_area_offset(0.18)
offset = xep.x4driver_get_frame_area_offset()
print('x4driver_get_frame_area_offset returned: ', offset)
# Set frame area
xep.x4driver_set_frame_area(2,6)
frame_area = xep.x4driver_get_frame_area()
print('x4driver_get_frame_area returned: [', frame_area.start, ', ', frame_area.end, ']');
# Set TX center freq
xep.x4driver_set_tx_center_frequency(3);
# Set PRFdiv
xep.x4driver_set_prf_div(16)
prf_div = xep.x4driver_get_prf_div()
print('x4driver_get_prf_div returned: ', prf_div)
# Start streaming
xep.x4driver_set_fps(20)
fps = xep.x4driver_get_fps()
print('xep_x4driver_get_fps returned: ' ,fps)
# Wait 5 sec.
time.sleep(5)
# Stop streaming
xep.x4driver_set_fps(0);
# Read data float if available.
if xep.peek_message_data_float() > 0:
data_float = xep.read_message_data_float()
else:
print('No data float messages available.')
# Reset module
xep.module_reset()
def main():
parser = OptionParser()
parser.add_option(
"-d",
"--device",
dest="device_name",
help="device file to use",
metavar="FILE")
(options, args) = parser.parse_args()
if not options.device_name:
print("you have to specify device, e.g.: python %s -d /dev/ttyACM0" % sys.argv[0])
sys.exit(1)
try_xep(options.device_name)
if __name__ == "__main__":
main()
在 Qt Designer 中,我希望 GUI 看起来像这样:
在 Qt Designer 中创建的示例 GUI
到目前为止,这是我的 GUI 代码:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic
Ui_MainWindow, QtBaseClass = uic.loadUiType("x4m300gui1.ui")
class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.connect_button.clicked.connect(self.ConnectModule)
def ConnectModule(self):
itemnumber_string = ""
ordercode_string = ""
firmwareid_string = ""
version_string = ""
serialnumber_string = ""
self.ui.itemnumber_box.setText(itemnumber_string)
self.ui.ordercode_box.setText(ordercode_string)
self.ui.firmwareid_box.setText(firmwareid_string)
self.ui.version_box.setText(version_string)
self.ui.serialnumber_box.setText(serialnumber_string)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
我想知道如何在单击按钮后在 gui 中显示传感器信息 'connect_button'。我会感谢所有的帮助。非常感谢。
您似乎想从 ConnectModule
调用 try_xep
过程。有try_xep
return你要的信息,然后写进ui.
看起来您正在尝试 运行 传感器采样和 GUI 作为两个应用程序,它们需要命名管道或共享文件来访问彼此的内存。为简单起见,您应该 运行 将其作为单个应用程序。
我会采用 classic OOP 方法并制作一个 class 代表传感器
class X4M300():
def __init__(self, options):
# Initialise things required to sample sensor including the device options
# Also get the device information and store it in local variables
# Create a local variable that stores the sensor value
def get_sample():
# sequence of things required to trigger sensor to start sampling, get sample and save the value into the local variable, essentially the try_xep() method.
然后在 PyQt 应用程序的主要方法中创建一个传感器实例 class 并将选项作为参数传递。
sensor = X4M300(options)
然后你可以这样做:
def ConnectModule(self):
sensor.get_sample()
self.ui.itemnumber_box.setText(sensor.itemnumber)
self.ui.ordercode_box.setText(sensor.ordercode)
self.ui.firmwareid_box.setText(sensor.firmwareid)
self.ui.version_box.setText(sensor.version)
self.ui.serialnumber_box.setText(sensor.serialnumber)