From ad01149daa888301f2838f6c58d154c03e3bea60 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Sun, 13 Apr 2025 11:02:48 +0200 Subject: [PATCH] Updated script --- spm6103_viewer.py | 114 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 101 insertions(+), 13 deletions(-) diff --git a/spm6103_viewer.py b/spm6103_viewer.py index 3f9dfd5..afe8a7e 100644 --- a/spm6103_viewer.py +++ b/spm6103_viewer.py @@ -1,7 +1,8 @@ import tkinter as tk -from tkinter import messagebox from tkinter.font import Font import serial +import os +os.environ['GDK_SCALE'] = '2' # Serial configuration port = '/dev/ttyUSB0' # Adjust to your specific port @@ -21,28 +22,69 @@ def send_command(command): return response def get_id(): + if not ser: + return "TEST" return send_command('*IDN?') def get_multimeter_data(): + if not ser: + return "TEST,+00.1234TEST,TEST,TEST" rawdata = send_command(f'CONFigure:ALL?') return rawdata def get_powersupply_data(): + if not ser: + return "0.1234,0.1234,0.1234" rawdata = send_command(f'MEASure:ALL:INFO?') return rawdata def set_res_mode(): + if not ser: + return "TEST" rawdata = send_command(f'[SENSe:]FUNCtion:RESistance') + rawdata = send_command(f'[SENSe:]RESistance:RANGe:AUTO') + return rawdata + +def set_res200_mode(): + if not ser: + return "TEST" + rawdata = send_command(f'[SENSe:]FUNCtion:RESistance') + rawdata = send_command(f'[SENSe:]RESistance:RANGe:200') return rawdata def set_cont_mode(): + if not ser: + return "TEST" rawdata = send_command(f'[SENSe:]FUNCtion:CONTinuity') return rawdata +def set_diod_mode(): + if not ser: + return "TEST" + rawdata = send_command(f'[SENSe:]FUNCtion:DIODe') + return rawdata + +def set_voltdc_mode(): + if not ser: + return "TEST" + rawdata = send_command(f'[SENSe:]FUNCtion:VOLTage:DC') + return rawdata + +def set_voltac_mode(): + if not ser: + return "TEST" + rawdata = send_command(f'[SENSe:]FUNCtion:VOLTage:AC') + return rawdata + +def set_cap_mode(): + if not ser: + return "TEST" + rawdata = send_command(f'[SENSe:]FUNCtion:CAPacitance') + return rawdata + # --- GUI Setup --- def fetch_device_info(): # Fetch the device ID and Channel data - device_id = get_id() multimeter_data = get_multimeter_data() # Update the labels @@ -62,23 +104,69 @@ multimeter_type_var = tk.StringVar() multimeter_data_var = tk.StringVar() multimeter_range_var = tk.StringVar() -# Create a font object +# Create dynamic font objects fontSmall = Font(size=10) fontMedium = Font(size=20) fontBig = Font(size=80) -app.rowconfigure(0, weight=1) -app.rowconfigure(1, weight=1) -app.rowconfigure(2, weight=1) -app.columnconfigure(0, weight=1) -app.columnconfigure(1, weight=2) +resize_after_id = None + +def apply_font_resize(): + width = app.winfo_width() + + fontSmall.configure(size=max(4, int(width * 0.02))) + fontMedium.configure(size=max(14, int(width * 0.03))) + fontBig.configure(size=max(24, int(width * 0.1))) + +def resize_loop(): + apply_font_resize() + app.after(200, resize_loop) + +resize_loop() # start it once + +# Bind resize event +#app.bind("", resize_fonts) + +# Configure grid to be fully responsive +app.rowconfigure(0, weight=4) # Top - medium +app.rowconfigure(1, weight=20) # Middle - big +app.rowconfigure(2, weight=1) # Bottom - small + +for j in range(7): + app.columnconfigure(j, weight=1) + +button_fg = "#444444" # Labels -tk.Label(app, textvariable=multimeter_type_var, font=fontMedium, bg="black", fg="lightgrey").grid(column=0, row=0, sticky=tk.W) -tk.Label(app, textvariable=multimeter_range_var, font=fontMedium, bg="black", fg="lightgrey").grid(column=1, row=0, sticky=tk.E) -tk.Label(app, textvariable=multimeter_data_var, font=fontBig, bg="black", fg="lightgrey").grid(column=0, columnspan=2, row=1, sticky=tk.W) -tk.Button(app, text="RES", command=set_res_mode, font=fontSmall, bg="black", fg="lightgrey", border=False).grid(column=0, row=2, sticky=tk.W) -tk.Button(app, text="CONT", command=set_cont_mode, font=fontSmall, bg="black", fg="lightgrey", border=False).grid(column=1, row=2, sticky=tk.W) +tk.Label(app, textvariable=multimeter_type_var, font=fontMedium, bg="black", fg="lightgrey") \ + .grid(column=0, columnspan=3, row=0, sticky="nsew", padx=0, pady=0) + +tk.Label(app, textvariable=multimeter_range_var, font=fontMedium, bg="black", fg="lightgrey") \ + .grid(column=4, columnspan=3, row=0, sticky="nsew", padx=0, pady=0) + +tk.Label(app, textvariable=multimeter_data_var, font=fontBig, bg="black", fg="lightgrey") \ + .grid(column=0, columnspan=7, row=1, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="RES", command=set_res_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=0, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="RES200", command=set_res200_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=1, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="CONT", command=set_cont_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=2, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="VOLT:DC", command=set_voltdc_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=3, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="VOLT:AC", command=set_voltac_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=4, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="DIOD", command=set_diod_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=5, row=2, sticky="nsew", padx=0, pady=0) + +tk.Button(app, text="CAP", command=set_cap_mode, font=fontSmall, bg="black", fg=button_fg, highlightbackground=button_fg, borderwidth=0) \ + .grid(column=6, row=2, sticky="nsew", padx=0, pady=0) # Initial fetch to start the auto-update process fetch_device_info()