Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
import wx
import time
import serial
global Aktiv
Aktiv = False
class gui(wx.Frame):
def __init__(self,parent,id):
#Parameter fuer serielle Kommunikation
COMNUM = 6 #Festlegen des COM-PORTS
global UART
UART = serial.Serial()
UART.Baudrate = 115200
UART.port = COMNUM - 1
UART.timeout = 0.2
UART.dsrdtr = False
# Oeffnen eines Fensters / Panel
wx.Frame.__init__(self,parent,id,'IRBAN',size=(1000,800))
Bedienung = wx.Panel(self)
# try:
# # Bild laden
# image_file = 'Sonne.jpg'
# bmp1 = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
# # Bild oben links platzieren
# self.bitmap1 = wx.StaticBitmap(self, -1, bmp1, (0, 0))
# except IOError:
# print "Image file %s not found" % imageFile
# raise SystemExit
#Startbutton erstellen
Startbutton = wx.Button(Bedienung,label="Bewegung starten",pos=(800,100),size=(150,50))
self.Bind(wx.EVT_BUTTON,self.Startbutton,Startbutton)
#Button für Abbruch --> spaeter Interruptsteuerung!
Abbrechen = wx.Button(Bedienung,label="STOPP!!",pos=(800,200),size=(150,50))
self.Bind(wx.EVT_BUTTON,self.Abbrechen,Abbrechen)
#Exit Button erstellen
Exitbutton = wx.Button(Bedienung,label="Fenster schliessen",pos=(800,300),size=(150,50))
self.Bind(wx.EVT_BUTTON,self.Exitbutton,Exitbutton)
# Button fuer Uebergabe der Parameter erstellen
Parabutton = wx.Button(Bedienung,label="Paramter schreiben",pos=(800,400),size=(150,50))
self.Bind(wx.EVT_BUTTON,self.Parabutton,Parabutton)
#Fenster schliessen bei Fenster schliessen (Kreuz)
self.Bind(wx.EVT_CLOSE, self.closewindow)
#Menuebar erstellen
status=self.CreateStatusBar()
Menuebar=wx.MenuBar()
Erste = wx.Menu()
Zweite = wx.Menu()
Erste.Append(wx.NewId(),"Was auch immer", "Zeig mir was auch immer")
Erste.Append(wx.NewId(),"Was auch immer1", "Zeig mir was auch immer1")
Zweite.Append(wx.NewId(),"Was auch immer", "Zeig mir was auch immer")
Zweite.Append(wx.NewId(),"Was auch immer1", "Zeig mir was auch immer1")
Menuebar.Append(Erste,"Erste")
Menuebar.Append(Zweite,"Zweite")
self.SetMenuBar(Menuebar)
#Slider
Uhrzeit = wx.Slider(Bedienung, -1, 1, 1, 12,pos=(100,100), size=(350,1), style=wx.SL_AUTOTICKS | wx.SL_LABELS)
Uhrzeit.SetTickFreq(5)
Neigung = wx.Slider(Bedienung, -1, 0, -15, 15,pos=(100,300), size=(350,1), style=wx.SL_AUTOTICKS | wx.SL_LABELS)
Neigung.SetTickFreq(5)
Frequenz = wx.Slider(Bedienung, -1, 0, 0, 115,pos=(100,500), size=(350,1), style=wx.SL_AUTOTICKS | wx.SL_LABELS)
Frequenz.SetTickFreq(5)
#Statischer Text zur Beschriftung der Slider
font = wx.Font(18, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False)
BezUhr = wx.StaticText(Bedienung,-1, "Position der Bewegung (Modell Uhr)",(75,50),(260,-1),wx.ALIGN_CENTER)
BezUhr.SetForegroundColour('black')
BezUhr.SetFont(font)
BezNei = wx.StaticText(Bedienung,-1, "Neigewinkel zur vollen h",(135,250),(260,-1),wx.ALIGN_CENTER)
BezNei.SetForegroundColour('black')
BezNei.SetFont(font)
BezFre = wx.StaticText(Bedienung,-1, "Schritte pro min",(135,450),(260,-1),wx.ALIGN_CENTER)
BezFre.SetForegroundColour('black')
BezFre.SetFont(font)
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
#Hintergrundbild
def senden(Befehl):
if(not(UART.isOpen())):
Aktiv = True
UART.open()
UART.write(Befehl)
if (Aktiv):
UART.close()
Aktiv = False
def lesen():
if(not(UART.isOpen())):
Aktiv = True
UART.open()
line = []
while True:
for c in ser.read():
line.append(c)
if c == '\r':
print (line)
break
def OnEraseBackground(self, evt):
"""
Add a picture to the background
"""
# yanked from ColourDB.py
dc = evt.GetDC()
if not dc:
dc = wx.ClientDC(self)
rect = self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap("Sonne.jpg")
dc.DrawBitmap(bmp, 0, 0)
def Startbutton(self,event):
#self.Close(True)
Aktiv = False
if(not(UART.isOpen())):
Aktiv = True
UART.open()
UART.write("Start" + '\r' )
if(Aktiv):
UART.close()
Aktiv = False
if(not(UART.isOpen())):
Aktiv = True
UART.open()
Antwort = UART.readline()
time.sleep(0.1)
if(Aktiv):
UART.close()
print Antwort
def Abbrechen(self,event):
#self.Close(True)
Aktiv = False
if(not(UART.isOpen())):
Aktiv = True
UART.open()
UART.write("Stopp" + '\r' )
time.sleep(0.1)
if(Aktiv):
UART.close()
Aktiv = False
if(not(UART.isOpen())):
Aktiv = True
UART.open()
Antwort = UART.readline()
time.sleep(0.1)
if(Aktiv):
UART.close()
print Antwort
def Parabutton(self,event):
Motortyp = ('#' + ':CL_motor_type' +'\r')
senden(Motortyp)
lesen()
def Exitbutton(self,event):
self.Close(True)
def closewindow(self,event):
self.Destroy()
if __name__ == '__main__':
app=wx.App()
frame = gui(parent=None,id=-1)
frame.Show()
app.MainLoop()
Das ist der vollständige code.. Ich möchte in der GUI den Button "Parameter schreiben" (Funktion Parabutton) drücken. Daraufhin wird der zu sendende String definiert. Als Argument Befehl an die Funktion senden übergeben und über die serielle Schnittstelle gesendet.