Ich habe eine einfache GUI mit Wxpython zum Lesen von Daten von einem seriellen Anschluss erstellt. Basierend auf mehreren Stellen war ich an die serielle Schnittstelle angeschlossen werden können, wenn ich drücken Sie die Connect-Taste und die Daten drucken, wenn i starten Taste drücken, aber ich drücken Sie die Stopp Taste Ich kann nicht Stoppen Sie den Druck der Daten.Start/Stop-Tasten zum Lesen von seriellen mit Wxpython
Hier ist mein Code (innen sind die Links zu den Pfosten refered vorher):
# -*- coding: utf-8 -*-
import wx
import wx.xrc
import serial
import time
import threading
class MyFrame (wx.Frame):
def __init__(self, parent):
wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(500,300), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
bSizer1 = wx.BoxSizer(wx.HORIZONTAL)
bSizer2 = wx.BoxSizer(wx.VERTICAL)
self.connectBtn = wx.Button(self, wx.ID_ANY, u"Connect", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer2.Add(self.connectBtn, 0, wx.ALL, 5)
self.startBtn = wx.Button(self, wx.ID_ANY, u"Start", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer2.Add(self.startBtn, 0, wx.ALL, 5)
self.stopBtn = wx.Button(self, wx.ID_ANY, u"Stop", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer2.Add(self.stopBtn, 0, wx.ALL, 5)
bSizer1.Add(bSizer2, 0, wx.EXPAND, 5)
bSizer3 = wx.BoxSizer(wx.VERTICAL)
self.m_textCtrl1 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
bSizer3.Add(self.m_textCtrl1, 1, wx.ALL|wx.EXPAND, 5)
self.ser = None
self.settings = {'PORT':'COM3' , 'BAUDRATE':9600}
self.connected = False
bSizer1.Add(bSizer3, 1, wx.EXPAND, 5)
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.connectBtn.Bind(wx.EVT_BUTTON, self.connectBtnOnButtonClick)
self.startBtn.Bind(wx.EVT_BUTTON, self.startBtnOnButtonClick)
self.stopBtn.Bind(wx.EVT_BUTTON, self.stopBtnOnButtonClick)
def __del__(self):
pass
# Virtual event handlers, overide them in your derived class
def connectBtnOnButtonClick(self, event):
# http://stackoverflow.com/questions/11092417/reconnecting-to-device-with-pyserial
try:
if self.ser == None:
self.ser = serial.Serial(self.settings['PORT'],
self.settings['BAUDRATE'],timeout=10)
# print "Successfully connected to port %r." % self.ser.port
self.connectBtn.SetLabel('Disconnect')
self.connected = True
return True
else:
if self.ser.isOpen():
self.ser.close()
self.connected = False
self.connectBtn.SetLabel('Connect')
# print "Disconnected."
return False
else:
self.ser.open()
self.connected = True
self.connectBtn.SetLabel('Disconnect')
# print "Connected."
return True
except serial.SerialException, e:
return False
def startBtnOnButtonClick(self, event):
while self.connected:
self.connected = True
while True:
if (self.ser.inWaiting() > 0):
data_str = self.ser.read(self.ser.inWaiting())
print(data_str.strip())
time.sleep(0.1)
def stopBtnOnButtonClick(self, event):
self.connected = False
# self.connected = False
# http://stackoverflow.com/questions/17553543/pyserial-non-blocking-read-loop
if __name__ == "__main__":
app = wx.App(redirect=False)
frame = MyFrame(None)
#app.SetTopWindow(frame)
frame.Show(True)
app.MainLoop()
Danke. Ivo
Es ist großartig gearbeitet zu entfernen !!! Danke für all Ihre Hilfe, nämlich mit dem Code und den Links. Mit freundlichen Grüßen. Ivo – TMoover