Python İle Mors Translator GUI

Python Dilinde Yazılmış GUI Morsdan Metne ve Metinden Mors Çevirmenine Otomatik Çeviri ve Doğru Uygulama ile Doğrudan Amatör Radyo Üzerinden Gönderme (Github)

Gerekli Paketleri Kuralım

$ sudo apt install python3 -y  && sudo apt install pip3 install pyserial
Bash

Dosyamızı Oluşturalım

$ touch morsgui.py
Bash

Dosyamızı Düzenleyelim

$ nano morsgui.py
Bash

Kodları Yazalım

import tkinter as tk
from tkinter import ttk  # ttk modülünü ekleyin
import webbrowser  # Link açmak için

# Harfleri Mors koduna çeviren sözlük
morse_code = {
    "A": ".-", "B": "-...", "C": "-.-.", "D": "-..", "E": ".",
    "F": "..-.", "G": "--.", "H": "....", "I": "..", "J": ".---",
    "K": "-.-", "L": ".-..", "M": "--", "N": "-.", "O": "---",
    "P": ".--.", "Q": "--.-", "R": ".-.", "S": "...", "T": "-",
    "U": "..-", "V": "...-", "W": ".--", "X": "-..-", "Y": "-.--",
    "Z": "--..", "1": ".----", "2": "..---", "3": "...--", "4": "....-",
    "5": ".....", "6": "-....", "7": "--...", "8": "---..", "9": "----.",
    "0": "-----"
}

# Mors kodundan harflere çeviren sözlük (tersi)
text_code = {v: k for k, v in morse_code.items()}

def convert_to_morse(text):
    """Metni Mors koduna çevirir."""
    text = text.upper()
    result = []
    for char in text:
        if char == " ":
            result.append(" / ")  # Kelime arası boşluk
        elif char in morse_code:
            result.append(morse_code[char])
    return " ".join(result)

def convert_to_text(morse):
    """Morse kodunu metne çevirir."""
    morse_chars = morse.split(" ")
    result = []
    for morse_char in morse_chars:
        if morse_char == "/":
            result.append(" ")  # Kelime arası boşluk
        elif morse_char in text_code:
            result.append(text_code[morse_char])
    return "".join(result)

def on_convert():
    """Kullanıcıdan alınan metni veya morseyi çevirir."""
    input_text = input_field.get()
    if "." in input_text or "-" in input_text:
        # Morse kodu metne çevirme
        output_text = convert_to_text(input_text)
    else:
        # Normal metni Morse koduna çevirme
        output_text = convert_to_morse(input_text)
    output_label.config(text=output_text)

def copy_to_clipboard(event):
    """Çıktıyı kopyalar ve 3 saniye sonra mesajı gizler."""
    output_text = output_label.cget("text")
    if output_text:
        root.clipboard_clear()  # Mevcut panoyu temizle
        root.clipboard_append(output_text)  # Yeni metni panoya ekle
        root.update()  # Panoyu güncelle
        output_label.config(text="Kopyalandı: " + output_text)  # Kopyalandı mesajı göster
        root.after(3000, lambda: output_label.config(text=output_text))  # 3 saniye sonra orijinal metni geri yükle

def open_link(event):
    """Linke tıklandığında web sayfasını açar."""
    webbrowser.open("http://qrv73.com")

def show_comport_form():
    """Bağlantı için COM port formunu gösterir."""
    comport_form = tk.Toplevel(root)
    comport_form.title("Bağlantı Seçenekleri")

    # COM port seçimi
    tk.Label(comport_form, text="COM Port Seçin:").pack(pady=10)
    comport_combobox = ttk.Combobox(comport_form, values=["COM1", "COM2", "COM3", "COM4"])  # ttk ile Combobox kullanıyoruz
    comport_combobox.pack(pady=10)

    # Bağlantı butonu
    def connect_comport():
        selected_comport = comport_combobox.get()
        print(f"Seçilen COM portu: {selected_comport}")
        comport_form.destroy()  # Formu kapat

    connect_button = tk.Button(comport_form, text="Bağlan", command=connect_comport)
    connect_button.pack(pady=10)

# GUI'yi oluştur
root = tk.Tk()
root.title("Mors Kodu Çevirici")

# Üst menüyü oluştur
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)

# "Bağlantı" menüsü
connection_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Bağlantı", menu=connection_menu)
connection_menu.add_command(label="Bağlantı Seç", command=show_comport_form)

# "Otomatik Oku Çevir" menüsü
auto_read_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Otomatik Oku Çevir", menu=auto_read_menu)
auto_read_menu.add_checkbutton(label="Aktif Edilsin", onvalue=1, offvalue=0)

# Pencereyi merkezleme
window_width = 500
window_height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
position_top = int((screen_height - window_height) / 2)
position_right = int((screen_width - window_width) / 2)
root.geometry(f"{window_width}x{window_height}+{position_right}+{position_top}")
root.resizable(False, False)  # Formun boyutlandırılmasını engeller

# Başlık etiketini oluştur (Büyük yazı)
title_label = tk.Label(root, text="QRV73 Morse Translator", font=("Helvetica", 24, "bold"), fg="blue")
title_label.pack(pady=20)

# Alt başlık (Mors kodunda yazı)
morse_title = convert_to_morse("QRV73 Morse Translator")
morse_label = tk.Label(root, text=morse_title, font=("Helvetica", 14, "italic"))
morse_label.pack(pady=10)

# Metin veya morse girişi
input_label = tk.Label(root, text="Metin veya Morse kodu girin:")
input_label.pack(pady=10)

input_field = tk.Entry(root, width=40)
input_field.pack(pady=5)

# Çevirme butonu
convert_button = tk.Button(root, text="Çevir", command=on_convert)
convert_button.pack(pady=10)

# Çıktı etiketi (kopyalama özelliği ile)
output_label = tk.Label(root, text="", width=40, height=4, relief="solid", cursor="hand2")
output_label.pack(pady=10)
output_label.bind("<Button-1>", copy_to_clipboard)  # Tıklanma olayını bağla

# Alt kısmı oluştur
footer_label = tk.Label(root, text="Programming By QRV73.com", fg="blue", cursor="hand2")
footer_label.pack(side="bottom", pady=10)
footer_label.bind("<Button-1>", open_link)

# GUI'yi başlat
root.mainloop()

Python

Kayıt Edelim

CTRL + O
CTRL + X

Çalıştıralım

python3 morsgui.py
Bash