SmallPythonProjects/GTK-examples/ListAndConnectToPort.py
2021-07-01 14:17:59 +02:00

162 lines
4.7 KiB
Python

#!/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()