Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk
- from tkinter import *
- import serial.tools.list_ports
- import serial
- # --- Serial Frame Global variables ---
- serial_connection = None
- # --- Transport Frame Global variables ---
- # --- Defines for Serial Frame
- def connect_serial():
- global serial_connection
- try:
- port = port_options.get()
- if not port:
- raise ValueError("No port selected")
- if port not in [port.device for port in serial.tools.list_ports.comports()]:
- raise ValueError(f"Selected port '{port}' is no longer available")
- baud_rate = baud_options.get()
- if not baud_rate:
- raise ValueError("No baud rate selected")
- serial_connection = serial.Serial(port, baud_rate)
- connect_button.config(state=tk.DISABLED)
- disconnect_button.config(state=tk.NORMAL)
- status_label.config(text=f"Connected to {port} at {baud_rate} baud")
- root.geometry("1080x720") # Set the new width and height of the window
- except ValueError as ve:
- status_label.config(text=str(ve))
- except serial.SerialException:
- status_label.config(text="Failed to connect to serial port")
- def disconnect_serial():
- global serial_connection
- if serial_connection is not None:
- serial_connection.close()
- connect_button.config(state=tk.NORMAL)
- disconnect_button.config(state=tk.DISABLED)
- status_label.config(text="Disconnected")
- # Restore the window size
- root.geometry("") # Reset the window size to its default
- def update_com_ports():
- port_list = [port.device for port in serial.tools.list_ports.comports()]
- port_combo['values'] = port_list
- root.after(1000, update_com_ports) # Schedule this function to run every 1000 milliseconds (1 second)
- # --- Initialize Tkinter ---
- root = tk.Tk()
- img = PhotoImage(file='icon.png')
- root.iconphoto(False, img)
- root.title("Serial Monitor")
- # --- Variables for Serial ---
- #Frame Get available ports and baud rates
- port_list = [port.device for port in serial.tools.list_ports.comports()]
- baud_list = ["110", "300", "600", "1200", "2400", "4800", "9600", "14400", "19200", "38400", "57600", "115200", "128000", "256000"]
- # Variables for selected options
- port_options = tk.StringVar()
- baud_options = tk.StringVar()
- # --- Create Frames ---
- left_frame = tk.Frame(root, bg="cyan")
- right_frame = tk.Frame(root, bg="pink")
- serial_frame = tk.Frame(left_frame, bg="blue")
- transport_frame = tk.Frame(left_frame, bg="green")
- transport2_frame = tk.Frame(right_frame, bg="yellow")
- # --- Create Serial Widgets ---
- serial_title = tk.Label(serial_frame, text="Serial Settings") # Set label background color to blue
- port_label = tk.Label(serial_frame, text="COM Port:") # Set label background color to blue
- baud_label = tk.Label(serial_frame, text="Baud Rate:") # Set label background color to blue
- port_combo = ttk.Combobox(serial_frame, textvariable=port_options, values=port_list, state="readonly")
- baud_combo = ttk.Combobox(serial_frame, textvariable=baud_options, values=baud_list, state="readonly")
- connect_button = tk.Button(serial_frame, text="Connect", command=connect_serial)
- disconnect_button = tk.Button(serial_frame, text="Disconnect", command=disconnect_serial, state=tk.DISABLED)
- status_label = tk.Label(serial_frame, text="") # Set label background color to blue
- # --- Create Transport Widgets ---
- transport_title = tk.Label(transport_frame, text="Transport Controls", bg="green")
- start_button = tk.Button(transport_frame, text="Start")
- stop_button = tk.Button(transport_frame, text="Stop")
- # --- Create test Widgets ---
- transport2_title = tk.Label(transport2_frame, text="Transport Controls", bg="green")
- start2_button = tk.Button(transport2_frame, text="Start")
- stop2_button = tk.Button(transport2_frame, text="Stop")
- # --- Publish Grid layout ---
- left_frame.grid(row=0, column=0, padx=10, pady=10)
- right_frame.grid(row=0, column=1, padx=10, pady=10)
- serial_frame.grid(row=0, column=0, padx=10, pady=10) # Grid the serial frame
- transport_frame.grid(row=1, column=0, padx=10, pady=10)
- transport2_frame.grid(row=1, column=0, padx=10, pady=10)
- # --- Publish Serial Widgets ---
- serial_title.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
- port_label.grid(row=1, column=0, padx=10, pady=5)
- baud_label.grid(row=2, column=0, padx=10, pady=5)
- port_combo.grid(row=1, column=1, padx=10, pady=5)
- baud_combo.grid(row=2, column=1, padx=10, pady=5)
- connect_button.grid(row=1, column=2, padx=10, pady=5)
- disconnect_button.grid(row=2, column=2, padx=10, pady=5)
- status_label.grid(row=3, column=0, columnspan=3, padx=10, pady=10)
- # --- Publish Transport Widgets ---
- transport_title.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
- start_button.grid(row=1, column=1, padx=10, pady=5)
- stop_button.grid(row=2, column=1, padx=10, pady=5)
- # --- Publish Test Widgets ---
- transport2_title.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
- start2_button.grid(row=1, column=1, padx=10, pady=5)
- stop2_button.grid(row=2, column=1, padx=10, pady=5)
- update_com_ports() # Starts the function to update COM ports periodically
- # Start Tkinter event loop
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement