Arka planda çalışan python uygulama

Kodu çalıştırmak için vakit ayıramadım.

Evet bir çok yöntem var ve fakat yaklaşım yanlışınız da olabilir birden çok butona neden gerek duydunuz?

Butonları enumarete edebilirsiniz. Burada istediğiniz event i gerçekleştirebilirsiniz, ister label değiştirin, ister hesaplama yaptırın.

def buton_fonksiyonu_1():
  print("Buton 1 tıklandı.")

def buton_fonksiyonu_2():
  print("Buton 2 tıklandı.")

def buton_fonksiyonu_3():
  print("Buton 3 tıklandı.")

buton_fonksiyonlari = [buton_fonksiyonu_1, buton_fonksiyonu_2, buton_fonksiyonu_3]

for indeks, fonksiyon in enumerate(buton_fonksiyonlari):
  print(f"Buton {indeks + 1}: {fonksiyon.__name__}")
  fonksiyon()
  print("-" * 20)

Diğer taraftan sorunuzun başına dönüp bir kodlama yaptım.

import tkinter as tk
from tkinter import ttk
import pyautogui
import keyboard
import threading
from PIL import Image, ImageDraw
import pystray
import configparser
import os

def makro1():
    pyautogui.alert("Makro 1 çalıştı!")

def makro2():
    pyautogui.alert("Makro 2 çalıştı!")

def makro3():
    pyautogui.alert("Makro 3 çalıştı!")


kisayollar = ["ctrl+a", "ctrl+b", "ctrl+c"]
makrolar = {"Makro 1": makro1, "Makro 2": makro2, "Makro 3": makro3}

kisayol_makro_map = {}  
config_file = "settings.ini"

def hotkey_listener():
    print("Kısayol dinleyici başlatıldı...")
    keyboard.wait()

def save_settings():
    config = configparser.ConfigParser()
    config["Shortcuts"] = {}
    for kisayol, var in selected_shortcuts.items():
        if var.get():  
            secilen_makro = dropdown_values[kisayol].get()
            if secilen_makro in makrolar:
                config["Shortcuts"][kisayol] = secilen_makro
    with open(config_file, "w") as configfile:
        config.write(configfile)

def load_settings():
    if os.path.exists(config_file):
        config = configparser.ConfigParser()
        config.read(config_file)
        if "Shortcuts" in config:
            return dict(config["Shortcuts"])
    return {}

def show_window(icon, item):
    icon.stop()
    root.after(0, root.deiconify)

def hide_window():
    root.withdraw()
    threading.Thread(target=icon.run, daemon=True).start()

def create_icon():
    icon_size = (64, 64)
    image = Image.new("RGBA", icon_size, (0, 0, 0, 0))
    draw = ImageDraw.Draw(image)
    draw.text((20, 15), "S", fill="white")
    menu = pystray.Menu(pystray.MenuItem("Göster", show_window))
    return pystray.Icon("app", image, "Makro Uygulaması", menu=menu)

def create_gui():
    global root, selected_shortcuts, dropdown_values
    root = tk.Tk()
    root.title("Kısayol - Makro Eşleştirme")

    selected_shortcuts = {}
    dropdown_values = {}
    saved_settings = load_settings()

    def kaydet():
        kisayol_makro_map.clear()
        for kisayol, var in selected_shortcuts.items():
            if var.get():
                secilen_makro = dropdown_values[kisayol].get()
                if secilen_makro in makrolar:
                    kisayol_makro_map[kisayol] = makrolar[secilen_makro]
                    keyboard.add_hotkey(kisayol, makrolar[secilen_makro])
            else:
                if kisayol in kisayol_makro_map:
                    keyboard.remove_hotkey(kisayol)
        save_settings()
        print("Seçimler Kaydedildi:", kisayol_makro_map)
    
    for i, kisayol in enumerate(kisayollar):
        var = tk.BooleanVar()
        chk = tk.Checkbutton(root, text=kisayol.upper(), variable=var)
        chk.grid(row=i, column=0, sticky="w")
        selected_shortcuts[kisayol] = var
        
        dropdown_values[kisayol] = tk.StringVar()
        combo = ttk.Combobox(root, textvariable=dropdown_values[kisayol], values=list(makrolar.keys()))
        combo.grid(row=i, column=1, padx=5, pady=2)
        
        
        if kisayol in saved_settings:
            var.set(1)
            dropdown_values[kisayol].set(saved_settings[kisayol])
            kisayol_makro_map[kisayol] = makrolar[saved_settings[kisayol]]
            keyboard.add_hotkey(kisayol, makrolar[saved_settings[kisayol]])
        else:
            var.set(0)  
    
    btn_kaydet = tk.Button(root, text="Kaydet", command=kaydet)
    btn_kaydet.grid(row=len(kisayollar), column=0, pady=10, columnspan=2)
    
    btn_gizle = tk.Button(root, text="Gizle", command=hide_window)
    btn_gizle.grid(row=len(kisayollar) + 1, column=0, pady=10, columnspan=2)
    
    threading.Thread(target=hotkey_listener, daemon=True).start()
    global icon
    icon = create_icon()
    
    root.mainloop()

create_gui()

Burada makro ve kısayollarınızı kolayca denetleyebilir ayarlarını kaydedebilirsiniz. Ben .ini dosyası kulladım siz csv de kullanabilirsiniz. Hatta kısayol ve makrolarınızı csv dosylarına yazıp oradan da çekebilirsiniz, geliştirimek size kalmış.

1 Beğeni