#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sun Mar 21 10:06:43 2021 @author: angoosh """ from serial.tools import list_ports import serial import gi from time import sleep import threading gi.require_version("Gtk", "3.0") from gi.repository import Gtk ser = "" baud = 19200 readPortEnable = False handshakeMsg = b'Hello\n' def readPort(): global readPortEnable file = open("PORT_DATA.csv","w") file.write("AQ_START\n") file.close() while readPortEnable == True: with open("PORT_DATA.csv","a") as file: s = ser.read(255) print(s) file.write(s.decode()) sleep(2) class ComboBoxWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ComboBox Example") self.set_border_width(10) self.portList = Gtk.ListStore(str) self.baudList = Gtk.ListStore(str) box = Gtk.Box(spacing=6) self.port_combo = Gtk.ComboBox.new_with_model_and_entry(self.portList) self.port_combo.connect("changed", self.on_name_combo_changed) self.port_combo.set_entry_text_column(0) self.refresh("ignore") try: self.port_combo.set_active(0) except: pass box.pack_start(self.port_combo, False, False, 0) self.baud_combo = Gtk.ComboBox.new_with_model_and_entry(self.baudList) self.baud_combo.connect("changed", self.baud_change) self.baud_combo.set_entry_text_column(0) bauds = ["9600", "19200", "38400", "57600", "115200", "250000", "500000", "1000000" ] for baud in bauds: self.baudList.append([baud]) self.baud_combo.set_active(1) box.pack_start(self.baud_combo, False, False, 0) button1 = Gtk.Button() button1.connect("clicked", self.refresh) button1.set_image(Gtk.Image.new_from_icon_name("view-refresh",1)) box.pack_start(button1, True, True, 0) button2 = Gtk.Button(label="Connect") button2.set_image(Gtk.Image.new_from_icon_name("Connect",1)) button2.connect("clicked", self.connect_disconnect) box.pack_start(button2, True, True, 0) self.add(box) def refresh(self, widget): ports = list_ports.comports() self.portList.clear() for port in ports: self.portList.append([port[0]]) def baud_change(self, combo): global baud tree_iter = combo.get_active_iter() if tree_iter is not None: model = combo.get_model() baud = model[tree_iter][0] print("Selected Baud: %s" % (baud)) else: entry = combo.get_child() print("Entered Baud: %s" % entry.get_text()) def connect_disconnect(self, butt): global ser, baud, readPortEnable, handshakeMsg if butt.get_label() == "Connect": self.port_combo.set_sensitive(False) self.baud_combo.set_sensitive(False) tree_iter = self.port_combo.get_active_iter() model = self.port_combo.get_model() port = model[tree_iter][0] ser = serial.Serial(port, baud, timeout=1) print("Connecting to:"+ port) butt.set_label("Disconnect") ser.write(b'Hello\n') while(ser.readline() != handshakeMsg): sleep(0.5) readPortEnable = True self.Port_thread = threading.Thread(target=readPort) self.Port_thread.start() else: ser.close() self.port_combo.set_sensitive(True) self.baud_combo.set_sensitive(True) readPortEnable = False print("Disconnecting") butt.set_label("Connect") def on_name_combo_changed(self, combo): tree_iter = combo.get_active_iter() if tree_iter is not None: model = combo.get_model() port = model[tree_iter][0] print("Selected Port: %s" % (port)) else: entry = combo.get_child() print("Entered: %s" % entry.get_text()) def on_country_combo_changed(self, combo): tree_iter = combo.get_active_iter() if tree_iter is not None: model = combo.get_model() country = model[tree_iter][0] print("Selected: country=%s" % country) def on_currency_combo_changed(self, combo): text = combo.get_active_text() if text is not None: print("Selected: currency=%s" % text) win = ComboBoxWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()