From 5ed2c2e86baa5cc6f1edfbaf74cd8ac63712318d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Br=C3=BCckner?= Date: Fri, 6 Dec 2013 14:44:03 +0200 Subject: [PATCH 1/2] Adding autocomplete to the portlist --- colourterm/connectdialog.py | 41 ++++++++++++++++++++++++++++++++----- colourterm/mainwindow.py | 1 + 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/colourterm/connectdialog.py b/colourterm/connectdialog.py index ab5d449..0a34a43 100644 --- a/colourterm/connectdialog.py +++ b/colourterm/connectdialog.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui -from serial import FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS, PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK,\ - PARITY_SPACE, STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO +import os +from serial import Serial, FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS, PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK,\ + PARITY_SPACE, STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO, SerialException +from serial.tools import list_ports from colourterm import fromUtf8, translate @@ -36,9 +38,9 @@ class Ui_ConnectDialog(object): self.portLabel = QtGui.QLabel(connectDialog) self.portLabel.setObjectName(fromUtf8('portLabel')) self.deviceLayout.addWidget(self.portLabel, 0, 0, 1, 1) - self.portEdit = QtGui.QLineEdit(connectDialog) - self.portEdit.setText(fromUtf8('/dev/ttyUSB0')) + self.portEdit = QtGui.QComboBox(connectDialog) self.portEdit.setObjectName(fromUtf8('portEdit')) + self.portEdit.setEditable(True) self.deviceLayout.addWidget(self.portEdit, 0, 1, 1, 1) self.baudLabel = QtGui.QLabel(connectDialog) self.baudLabel.setObjectName(fromUtf8('baudLabel')) @@ -115,6 +117,14 @@ class Ui_ConnectDialog(object): self.buttonBox.accepted.connect(connectDialog.accept) self.buttonBox.rejected.connect(connectDialog.reject) + def update_port_list(self): + self.portEdit.clear() + ports = [] + for port in self.serial_ports(): + ports.append(port) + ports.sort() + self.portEdit.addItems(ports) + def retranslateUi(self, connectDialog): connectDialog.setWindowTitle(translate('ConnectDialog', 'Open Port')) self.portLabel.setText(translate('ConnectDialog', 'Port:')) @@ -151,6 +161,27 @@ class Ui_ConnectDialog(object): self.readingCheckBox.setText(translate('ConnectDialog', 'Reading')) self.writingCheckBox.setText(translate('ConnectDialog', 'Writing')) + def serial_ports(self): + """ + Returns a generator for all available serial ports + """ + if os.name == 'nt': + # windows + for i in range(256): + try: + s = Serial(i) + s.close() + yield 'COM' + str(i + 1) + except SerialException: + pass + else: + # unix + try: + for port in list_ports.comports(): + yield port[0] + except NameError: + # pyserial 2.6 cannot handle serial usb ports very well, in that case just do not provide a list + pass class ConnectDialog(QtGui.QDialog, Ui_ConnectDialog): @@ -159,7 +190,7 @@ class ConnectDialog(QtGui.QDialog, Ui_ConnectDialog): self.setupUi(self) def getPort(self): - return unicode(self.portEdit.text()) + return unicode(self.portEdit.currentText()) def getBaud(self): return int(unicode(self.baudComboBox.currentText())) diff --git a/colourterm/mainwindow.py b/colourterm/mainwindow.py index 6443125..5e6ece7 100644 --- a/colourterm/mainwindow.py +++ b/colourterm/mainwindow.py @@ -166,6 +166,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): output = '' def onOpenActionTriggered(self): + self.connectDialog.update_port_list() if self.connectDialog.exec_() == QtGui.QDialog.Accepted: if not self.deviceClosed: self.deviceClosed = True From f52b1b2bfe61179ebc4bde015fe5245d1ef28cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Br=C3=BCckner?= Date: Tue, 10 Dec 2013 08:29:31 +0200 Subject: [PATCH 2/2] Write ASCII to serial, indentation fixes --- colourterm/connectdialog.py | 63 ++++++++++++++++++------------------- colourterm/mainwindow.py | 15 ++++----- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/colourterm/connectdialog.py b/colourterm/connectdialog.py index 0a34a43..1af7fd7 100644 --- a/colourterm/connectdialog.py +++ b/colourterm/connectdialog.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- - -from PyQt4 import QtCore, QtGui import os +from PyQt4 import QtCore, QtGui from serial import Serial, FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS, PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK,\ PARITY_SPACE, STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO, SerialException from serial.tools import list_ports @@ -117,14 +116,6 @@ class Ui_ConnectDialog(object): self.buttonBox.accepted.connect(connectDialog.accept) self.buttonBox.rejected.connect(connectDialog.reject) - def update_port_list(self): - self.portEdit.clear() - ports = [] - for port in self.serial_ports(): - ports.append(port) - ports.sort() - self.portEdit.addItems(ports) - def retranslateUi(self, connectDialog): connectDialog.setWindowTitle(translate('ConnectDialog', 'Open Port')) self.portLabel.setText(translate('ConnectDialog', 'Port:')) @@ -161,28 +152,6 @@ class Ui_ConnectDialog(object): self.readingCheckBox.setText(translate('ConnectDialog', 'Reading')) self.writingCheckBox.setText(translate('ConnectDialog', 'Writing')) - def serial_ports(self): - """ - Returns a generator for all available serial ports - """ - if os.name == 'nt': - # windows - for i in range(256): - try: - s = Serial(i) - s.close() - yield 'COM' + str(i + 1) - except SerialException: - pass - else: - # unix - try: - for port in list_ports.comports(): - yield port[0] - except NameError: - # pyserial 2.6 cannot handle serial usb ports very well, in that case just do not provide a list - pass - class ConnectDialog(QtGui.QDialog, Ui_ConnectDialog): def __init__(self): @@ -209,3 +178,33 @@ class ConnectDialog(QtGui.QDialog, Ui_ConnectDialog): def getHardwareHandshake(self): return self.hardwareCheckBox.isChecked() + + def updatePortCombobox(self): + self.portEdit.clear() + ports = [] + for port in self._getSerialPorts(): + ports.append(port) + ports.sort() + self.portEdit.addItems(ports) + + def _getSerialPorts(self): + """ + Returns a generator for all available serial ports + """ + if os.name == 'nt': + # windows + for i in range(256): + try: + s = Serial(i) + s.close() + yield 'COM' + str(i + 1) + except SerialException: + pass + else: + # unix + try: + for port in list_ports.comports(): + yield port[0] + except NameError: + # pyserial 2.6 cannot handle serial usb ports very well, in that case just do not provide a list + pass diff --git a/colourterm/mainwindow.py b/colourterm/mainwindow.py index 5e6ece7..46358e7 100644 --- a/colourterm/mainwindow.py +++ b/colourterm/mainwindow.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os import threading from PyQt4 import QtCore, QtGui @@ -166,7 +167,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): output = '' def onOpenActionTriggered(self): - self.connectDialog.update_port_list() + self.connectDialog.updatePortCombobox() if self.connectDialog.exec_() == QtGui.QDialog.Accepted: if not self.deviceClosed: self.deviceClosed = True @@ -240,7 +241,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.sendComboBox.insertItem(0, output) self.sendComboBox.setCurrentIndex(0) self.sendComboBox.clearEditText() - self.device.write(output + u'\r\n') + self.device.write(output + '\r\n') def onContentsSizeChanged(self, size): if self.followOutput: @@ -292,13 +293,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): style = u'%sbackground-color: %s; ' % (style, highlight.background) break if style: - try: - output = u'
%s
' % (style, unicode(output, u'utf-8')) - except TypeError: - output = u'
%s
' % (style, output) + try: + output = u'
%s
' % (style, unicode(output, u'utf-8')) + except TypeError: + output = u'
%s
' % (style, output) else: output = u'
%s
' % output - return output + return output def saveHighlights(self, highlights): settings = QtCore.QSettings()