我正在使用以下代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import serial
import serial.tools.list_ports
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
class SerialComm(Gtk.Window):
glade = "serial_comm.glade"
builder = Gtk.Builder.new_from_file(glade)
builder.add_from_file(glade)
comboPorts = builder.get_object("comboPorts")
comboBauds = builder.get_object("comboBauds")
btn_conectar = builder.get_object("btnConectar")
textbuffer = builder.get_object("textbuffer")
textview = builder.get_object("textview")
def get_ports(self):
ports = list(serial.tools.list_ports.comports())
for p in ports:
self.comboPorts.append_text(p[0])
self.comboPorts.set_active(1)
print(p[0])
尝试打开端口并获取arduino数据
def open_port(self, widget):
port = self.comboPorts.get_active_text()
baud = self.comboBauds.get_active_text()
arduino = serial.Serial(port, baud)
temp = arduino.readline()
self.textbuffer.set_text(temp)
self.textview.set_buffer(self.textbuffer)
arduino.close()
def __init__(self):
window = self.builder.get_object("window")
window.connect("destroy", Gtk.main_quit)
self.btn_conectar.connect("clicked", self.open_port)
self.get_ports()
window.show_all()
if __name__ == '__main__':
application = SerialComm()
Gtk.main()
但我必须点击一个按钮来获取数据(传感器的温度,每秒读取一次)。你知道吗
self.btn_open.connect("clicked", self.openport)
如何在单击按钮后自动更新textview内容?你知道吗
来自@theGtknerd的解决方案并不是很理想。使用
g_timeout_add_seconds
不是很好,您在数据接收上增加了1秒的延迟。使用g_timeout_add
只会隐藏真正的问题:您正在进行轮询。你知道吗相反,应该使用^{} 在数据真正到达时调用回调。然而,这需要有一个
GIOChannel
可以被pyserial
使用。GIOChannel
可以从文件描述符上创建,我只是不知道如何从pyserial对象获取文件描述符,但这应该是可行的。。。你知道吗更好的方法是打开端口并在信息进入时从中读取。示例:
相关问题 更多 >
编程相关推荐