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ış.