import serial from Tkinter import * # all devicefiles - change it, if necessary devicefiles=['/dev/ttyS0', '/dev/ttyS1', '/dev/ttyUSB0'] # default device, selected at startup serdevice=serial.Serial('/dev/ttyS0', timeout=0.5) # number of F-switches (for testing only 4) maxf=4 # Anfangszustand der Funktionstasten f1var=[] for id in range(maxf+1): f1var.append(True) # default value of Power-Switch powervar=True # array for the f-switches fbutton=[] # Debug-Level, increase, if you want more output debug=0 def gruss(): print "Python for UniDecF with SPROG II, Version 0.1, Ralph Sontag" # serielles Kommando aus comsel lesen und abschicken. def sercommand(): x=comsel.get() if debug > 0: print "Schreibe: ", x serdevice.write(x + '\r\n') try: y = serdevice.readline() if debug > 0: print "Lese: ", y ausgabe.insert("10.0",y) # y = serdevice.readline() # print "Lese: ", y # ausgabe.insert("10.0",y) except: print "Nichts zu lesen" def power(): global powervar if powervar == True: s = '+' powervar = False power.config(background="green", activebackground='#6f6') else: s = '-' powervar = True power.config(background="red", activebackground='#f66') comsel.set(s) sercommand() # Funktionstasten, z.B. F1 bei ID 5: # O 05 81 84 / O 05 80 85 # 0000 0101 # 05 = Adresse # 1000 0001 # # 1000 0100 # Pruefbyte = excl. Oder # def f1(id): global f1var if f1var[id] == True: f1var[id] = False fbutton[id].config(background="red", activebackground='#f66') else: f1var[id] = True fbutton[id].config(background="green", activebackground='#6f6') s = 'O '+str(hex(idsel.get()))[2:]+' ' b = 128 for f in range(maxf): if f1var[f+1] == False: if debug > 2: print "Addiere: ", 2**f b = b + 2**f if f1var[0] == False: b = b + 16 s = s + str(hex(b))[2:]+' '+str(hex(idsel.get() ^ b))[2:] comsel.set(s) sercommand() def changedevice(*args): try: serdevice.close() except: print "No serial device open" serport = devsel.get() serdevice.portstr = serport if debug > 0: print "New serdevices: ", serdevice serdevice.open() def ende(): root.destroy() def make_fcall(value): def call_func(): f1(value) return call_func # Oberflaeche bauen root = Tk() devsel = StringVar() devsel.trace("w", changedevice) comsel = StringVar() idsel = IntVar() # Menue bauen root.ml = Menu(root) root.ml.add_command(label="Quit", command=ende) root.ml.add_command(label="Version", command=gruss) root.config(menu=root.ml) # Elemente definieren label1 = Label (root, pady=10, text="SPROG II \r\nSelect the device file:") label2 = Label (root, text="Command Monitor") ausgabe=Text(height=10, width=20) commandline=Entry(root,textvariable=comsel) sendcom = Button(root, text="sent command", command=sercommand) frame1=Frame(root, pady=10) frame2=Frame(root, pady=10) # frame1 packen: Power und F-Tasten power = Button(frame1, width=0, padx=0, text="Power", background="red", activebackground='#f66', command=power) for id in range(maxf+1): fbutton.append(Button(frame1, padx=0,width=0, text="F"+str(id), background="green", activebackground='#6f6', command=make_fcall(id))) # frame2 packen: Auswahl der Decoder-ID label3 = Label (frame2, text="Select the Decoder-ID:") label3.pack() for id in range(1,10,1): Radiobutton(frame2, width=1, text=id, value=id, indicatoron=0, variable=idsel).pack(side=LEFT) idsel.set(3) # Elemente anordnen label1.pack() for item in devicefiles: Radiobutton(root, width=20, text=item, value=item, indicatoron=0, variable=devsel).pack(anchor=W) devsel.set('/dev/ttyS0') frame2.pack() frame1.pack() power.pack(side=LEFT) for id in range(maxf+1): fbutton[id].pack(side=LEFT) label2.pack() ausgabe.pack() commandline.pack() sendcom.pack() root.mainloop()