22/04/2026

Moxon calculator in python

Moxon program in python

 Screenshot


Code (I pasted it in Thonny and it ran first time):

import tkinter as tk
from tkinter import ttk, messagebox
import math
def calculate():
    try:
        F = float(freq_entry.get())
        WD = float(wd_entry.get())
        U = unit_var.get()
        if F <= 0:
            raise ValueError("Frequency must be > 0")
        # Conversie naar golflengte
        if U == 1:  # inches
            WLI = 11802.71 / F
            DW = WD / WLI
        elif U == 2:  # mm
            WLI = 299792.5 / F
            DW = WD / WLI
        else:  # wavelengths
            DW = WD
        D1 = 0.4342945 * math.log(DW)
        warnings = []
        if D1 < -6:
            warnings.append("Wire diameter < 1E-6 wavelengths: results uncertain.")
        if D1 > -2:
            warnings.append("Wire diameter > 1E-2 wavelengths: results uncertain.")
        # Berekeningen
        A = (-0.0008571428571 * (D1 ** 2)) + (-0.009571428571 * D1) + 0.3398571429
        B = (-0.002142857143 * (D1 ** 2)) + (-0.02035714286 * D1) + 0.008285714286
        C = (0.001809523381 * (D1 ** 2)) + (0.01780952381 * D1) + 0.05164285714
        D = (0.001 * D1) + 0.07178571429
        E = (B + C) + D
        WF = 983.5592 / F
        WFI = WF * 12
        WFM = WF * 304.8
        # Output tekst
        result = f"""Wire diameter (λ): {DW:.6f}
A = {A:.6f}
B = {B:.6f}
C = {C:.6f}
D = {D:.6f}
E = {E:.6f}
Wavelength:
{WF:.3f} feet / {WFI:.3f} inches / {WFM: .3f} mm
Dimensions:
A = {A*WF:.3f} ft / {A*WFI:.3f} in / {A*WFM: .3f} mm
B = {B*WF:.3f} ft / {B*WFI:.3f} in / {B*WFM: .3f} mm
C = {C*WF:.3f} ft / {C*WFI:.3f} in / {C*WFM: .3f} mm
D = {D*WF:.3f} ft / {D*WFI:.3f} in / {D*WFM: .3f} mm
E = {E*WF:.3f} ft / {E*WFI:.3f} in / {E*WFM: .3f} mm
"""
        if warnings:
            result += "\nWarnings:\n" + "\n".join(warnings)
        output_text.delete(1.0, tk.END)
        output_text.insert(tk.END, result)
    except Exception as e:
        messagebox.showerror("Error", str(e))

# GUI
root = tk.Tk()
root.title("Moxon Rectangle Calculator")
frame = ttk.Frame(root, padding=10)
frame.grid()
# Frequentie
ttk.Label(frame, text="Frequency (MHz):").grid(column=0, row=0, sticky="w")
freq_entry = ttk.Entry(frame)
freq_entry.grid(column=1, row=0)
# Wire diameter
ttk.Label(frame, text="Wire Diameter:").grid(column=0, row=1, sticky="w")
wd_entry = ttk.Entry(frame)
wd_entry.grid(column=1, row=1)
# Units
ttk.Label(frame, text="Units:").grid(column=0, row=2, sticky="w")
unit_var = tk.IntVar(value=1)
ttk.Radiobutton(frame, text="Inches", variable=unit_var, value=1).grid(column=1, row=2, sticky="w")
ttk.Radiobutton(frame, text="Millimeters", variable=unit_var, value=2).grid(column=1, row=3, sticky="w")
ttk.Radiobutton(frame, text="Wavelengths", variable=unit_var, value=3).grid(column=1, row=4, sticky="w")
# Button
ttk.Button(frame, text="Calculate", command=calculate).grid(column=0, row=5, columnspan=2, pady=10)
# Output
output_text = tk.Text(frame, width=50, height=20)
output_text.grid(column=0, row=6, columnspan=3)
root.mainloop()

No comments:

Post a Comment

All reactions will be moderated. Publicity or links to other sites are not allowed.