【发布时间】:2020-03-09 08:15:34
【问题描述】:
我有一个连接到我的界面的设备,并且想将数据插入到QlineEdit 小部件中
这个函数def getdevice_data(self):从设备接收数据并以字符串形式返回
用self.get_output__button.clicked.connect(self.getdevice_data)我“启动”这个功能
并使用self.custom_attribute.connect(self.device_input1.setText) 将输出发送到QLineEdit 小部件
如何保持函数运行并将函数中的新数据插入到空行编辑小部件中,而无需添加多个按钮来一次又一次地启动函数?
完整代码
import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
import serial
import time
class CustmClass(qtw.QWidget):
'''
description einfügen
'''
# Attribut Signal
custom_attribute = qtc.pyqtSignal(str)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# your code will go here
# Interface
self.resize(300, 210)
# button
self.get_output__button = qtw.QPushButton("start function ?")
# lineEdit
self.device_input1 = qtw.QLineEdit()
self.device_input2 = qtw.QLineEdit()
# Layout
vboxlaout = qtw.QVBoxLayout()
vboxlaout.addWidget(self.get_output__button)
vboxlaout.addWidget(self.device_input1)
vboxlaout.addWidget(self.device_input2)
self.setLayout(vboxlaout)
self.show()
# Funktionalität
self.get_output__button.clicked.connect(self.getdevice_data)
self.custom_attribute.connect(self.device_input1.setText)
# self.custom_attribute.connect(self.device_input2.setText)
def getdevice_data(self):
try:
# Serial() opens a serial port
my_serial = serial.Serial(port='COM6', baudrate=2400, bytesize=7,
parity=serial.PARITY_NONE, timeout=None, stopbits=1)
if my_serial.is_open:
print("port open")
# log einfügen
while my_serial.is_open:
data = my_serial.read() # wait forever till data arives
time.sleep(1) # delay
data_left = my_serial.inWaiting()
data += my_serial.read(data_left)
data = data.decode("utf-8", "strict")
if type(data) == str:
print(data)
return self.custom_attribute.emit(data)
else:
print("zu")
except serial.serialutil.SerialException:
print("not open")
# logger hinzufügen
if __name__ == '__main__':
app = qtw.QApplication(sys.argv)
w = CustmClass()
sys.exit(app.exec_())
【问题讨论】:
-
time.sleep有什么特别的原因吗,或者他们是为了模仿等待? -
time.sleep是为了确保从设备中获取所有数据 -
@HoboCoder 更好地解释你的意思,你的问题令人困惑。
-
@eyllanesc 希望编辑能减少混乱
-
@HoboCoder 好的,我更了解你。我仍然有以下疑问:1)如果您删除 time.sleep() 您的代码仍然有效吗? 2) 你必须添加多少个 QLineEdits 来添加文本?他们只有 2 个 QLineEdits 吗?假设信息被发射了两次,所以 2 个 QLineEdits 已经被填充,在下一个发射中应该放置该文本的 QLineEdit?
标签: python pyqt pyqt5 pyserial