#!/usr/bin/env python from tkinter import * import os # Elektor SDR Bedienpanel DL6SDZ(2019) # Benötigt ElektorSDR4Linux als Ausgabetreiber # Wird im gleichen Verzeichnis aufgerufen # Gestet mit Python 3.6 und Ubuntu 18.04.1 LTS # Maustaste losgelassen # jetzt wird alles ausgewertet und an den SDR Empfänger geschickt #Band 0 1 2 3 4 5 fstarts = [10000, 4000, 2000, 800, 400, 130] fstops = [30000, 16000, 8000, 3200, 1600, 800] fticks = [5000, 2000, 2000, 500, 200, 200] steps = [ 25, 10, 5, 2, 1, 0.5] def mouseevent(wert): fstart = fstarts[band.get()] fstop = fstops [band.get()] ftick = fticks [band.get()] step = steps [band.get()] #print("Fstart:"+str(fstart)) #print("Fstop:"+str(fstop)) print("Freq:"+str(freq.get())) freq_scale.configure(from_=fstart, to=fstop, resolution=step, variable=freq, tickinterval=ftick) #print("Freq:"+str(freq.get())+" (neues Band)") #Ausgabestring bilden outtext = ("./ElektorSDR4Linux --offset="+str(offs.get())+" --xtal="+str(xtal.get())+" --mux="+str(inp.get())+" --db="+str(db.get())+" --band="+str(band.get())+" --freq="+str(freq.get())) print(outtext) # Befehle an Treiber schicken os.system (outtext) # Die Fenster erstellen root = Tk() #Radiobuttons fenster = Frame(root) fenster.pack() # Slider für Frequenz freq_fenster = Frame(root) freq_fenster.pack( ) # Slider für Offset offs_fenster = Frame(root) offs_fenster.pack( ) # Slider für Quarzabweichung xtal_fenster = Frame(root) xtal_fenster.pack( ) # Den Fenstertitle erstellen root.title("Elektor SDR Panel") left = Label(freq_fenster, text="Center Frequenz") left.grid(row=1, column=2, sticky=W) left = Label(offs_fenster, text="Offset zur Anzeigefrequenz") left.grid(row=1, column=2, sticky=W) left = Label(xtal_fenster, text="Xtal Abweichung") left.grid(row=1, column=2, sticky=W) # Werte aus den Widgets band = IntVar() freq = IntVar() db = IntVar() inp = IntVar() offs = IntVar() xtal = IntVar() freq_scale = Scale(freq_fenster, from_=10000, to=30000, length=400, resolution = 25, variable=freq, tickinterval=5000, orient=HORIZONTAL) freq_scale.grid(row=1, column=1, sticky=W) v = Scale(offs_fenster, from_=0, to=32, length=100, resolution = 1, variable=offs, tickinterval=16, orient=HORIZONTAL) v.grid(row=1, column=1, sticky=S) # Setze Default offset für Anzeige v.set(15) w = Scale(xtal_fenster, from_=0, to=255, length=255, resolution = 1, variable=xtal, tickinterval=50, orient=HORIZONTAL) w.grid(row=1, column=1, sticky=S) # Bandauswahl Radiobutton(fenster, text="10-30Mhz", padx = 0, pady=0, variable=band, value=0).grid(row=2, column=1, sticky=W) Radiobutton(fenster, text="4-16Mhz", padx = 0, pady=0, variable=band, value=1).grid(row=2, column=2, sticky=W) Radiobutton(fenster, text="2-8Mhz", padx = 0, pady=0, variable=band, value=2).grid(row=2, column=3, sticky=W) Radiobutton(fenster, text="0.8-3.2Mhz", padx = 0, pady=0, variable=band, value=3).grid(row=2, column=4, sticky=W) Radiobutton(fenster, text="0.4-1.6Mhz", padx = 0, pady=0, variable=band, value=4).grid(row=2, column=5, sticky=W) Radiobutton(fenster, text="130-800khz", padx = 0, pady=0, variable=band, value=5).grid(row=2, column=6, sticky=W) # Abschwächer auswählen Radiobutton(fenster, text="0db", variable=db, value=0).grid(row=3, column=1, sticky=W) Radiobutton(fenster, text="-10db", variable=db, value=1).grid(row=3, column=2, sticky=W) Radiobutton(fenster, text="-20db", variable=db, value=2).grid(row=3, column=3, sticky=W) # Multiplexer INPUT auswählen # Input 1-3 geht auf Antennenbuchse 1 jeweils verschiedene Filter # Input 4 geht auf Antennenbuchse 2 zumindest bei meiner Hardware # Input 5-7 sind in der Hardware nicht belegt # Input 8 gibt den Test Clock 5 Mhz auf den Eingang Radiobutton(fenster, text="IN1/ANT1", variable=inp, value=0).grid(row=4, column=1, sticky=W) Radiobutton(fenster, text="IN2/ANT1", variable=inp, value=1).grid(row=4, column=2, sticky=W) Radiobutton(fenster, text="IN3/ANT1", variable=inp, value=2).grid(row=4, column=3, sticky=W) Radiobutton(fenster, text="IN4/ANT2", variable=inp, value=3).grid(row=4, column=4, sticky=W) Radiobutton(fenster, text="IN8/TEST-CLK", variable=inp, value=7).grid(row=4, column=6, sticky=W) # Wenn Maustaste innerhalb des Fensters losgelassen => Werte an Treiber schicken root.bind('', mouseevent) # In der Ereignisschleife auf Eingabe des Benutzers warten. root.mainloop()