ich programmiere grade frisch in python 3.4, gehe es also mit learning by doing an.
Dabei bin ich aktuell auf ein Problem gestoßen, wobei ich einfach nicht weiter komme.
Es geht um Folgendes: Ich möchte ein Programm schreiben, welches nach dem Start eine GUI(pyQT) startet und mir dort in einer Combobox alle grade verwendeten COM-ports anzeigt. Das hat den Sinn, dass später der Benutzer nur die Auswahl zwischen den verwendeten COM-ports hat, um beispielsweise eine Verbindung zu einem Arduino aufzubauen. Da die UI in einer endlos-Schleife ja die Slots für die Widgets abfragen muss, hatte ich mir gedacht, dass ich dafür ´´einfach´´ einen neuen Thread starte und einen Zweiten, der die com-port Liste aktualisiert, starte. Soweit so gut, bis hier funktioniert es auch so wie ich mir das gedacht habe, nur schaffe ich es nicht die Liste mit den verwendeten com-ports an das QCombobox widget zu schicken.
Ich bin dankbar für jede Hilfe.
Code: Alles auswählen
import sys
import time
import _thread
import glob
import serial
from PyQt4 import QtGui, QtCore
from connectWinGui import Ui_connectWin as Dlg
COMPorts=[]
class Ui_connectWin(QtGui.QDialog, Dlg):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
# Slots einrichten
self.connect(self.PBverbinden,
QtCore.SIGNAL("clicked()"), self.PBclickVerbinden)
self.connect(self.PBabbrechen,
QtCore.SIGNAL("clicked()"), self.PBclickAbbrechen)
# self.connect(self.CBcom,
# QtCore.SIGNAL("currentIndexChanged(index)"), self.CBcom)
def PBclickVerbinden(self):
print("Okay")
self.close()
def PBclickAbbrechen(self):
print ("abbrechen")
def CBcom(self):
print ("click")
#Funktionen-----------------------------------------------
def serial_ports():
"""Returns all available COM ports
"""
if sys.platform.startswith('win'):
result = []
for i in range(256):
try:
s = serial.Serial(i)
s.close()
result.append('COM' + str(i + 1))
except serial.SerialException:
pass
return result
elif sys.platform.startswith('linux'):
return glob.glob('/dev/tty*')
elif sys.platform.startswith('darwin'):
return glob.glob('/dev/tty.*')
#Threads-----------------------------------------------
def qtLoopThread():
app = QtGui.QApplication(sys.argv)
dialog = Ui_connectWin()
dialog.show()
app.exec_()
sys.exit()
def mainTread():
global COMPorts
while 1:
COMPorts=serial_ports()
print(COMPorts)
Ui_connectWin.clear()#<----------------Hier stimmt irgend etwas nicht??
Ui_connectWin.CBcom.addItems(COMPorts)
time.sleep(5)
_thread.start_new_thread(qtLoopThread, ())
_thread.start_new_thread(mainTread, ())
while True:
pass