Python shortcut uygulamam hata veriyor

Hocaaam yardım.. kaldıramam geri döndüm tek exeli projeye. Şimdi gui'yi bir tetikleyiciye bağlamak istiyorum bunu open_gui adlı bi fonksiyona atayıp onu stray iconda menüde göstericem. Bunu yapabilmenin bir yolu var mı?
Tetikleyici derken thread kullanmak mı yoksa başka bir proje mi?
 
Tetikleyici derken thread kullanmak mı yoksa başka bir proje mi?
hayır şöyle bir şey var:

Python:
def background_task():
    conn = sqlite3.connect('Hotkey_Editor.db')
    cur = conn.cursor()

    def load_hotkeys():
        global app_name, primary_key
        cur.execute("SELECT path, keys FROM hotkeys")
        hotkeys = cur.fetchall()
        for hotkey in hotkeys:
            app_name = hotkey[0]
            keys = hotkey[1]
            primary_key, secondary_key = keys.split("+")
            keyboard.add_hotkey(keys, run, args=(app_name,))
            cur.close()
            conn.close()
    load_hotkeys()
#    while True:
#        keyboard.wait()


thread = threading.Thread(target=background_task)
thread.start()


def open_gui():
    subprocess.Popen(r"C:\Users\serda\PycharmProjects\hotkey\dist\Hotkey_Editor.exe", shell=True)


def destroy():
    subprocess.call("taskkill /f /im Hotkey_Editor.exe")


icon = pystray.Icon("Hotkey Editor")
icon.menu = pystray.Menu(pystray.MenuItem("Hotkey Editor'ü aç", action=open_gui),
                         pystray.MenuItem("Çıkış", action=destroy))
icon.icon = Image.open("logo.ico")
icon.run()

uygulamanın başlangıcında arka plan görevimi başlattığım için open_gui() fonksiyonu uygulamayı açabiliyor fakat arayüze ulaşabilmesine uygulamanın başladığındaki arka plan görevi engel oluyor. Ben de diyorum ki. Öyle bir fonksiyon yazayım ki gui'yi tetiklesin.

Sınıf oluşturup ardından sınıfa nesne atasam yani şöyle bişeyler yapsam işe yarar gibime geliyor ama?

def open_gui():
app = MainApp()
app.mainloop()
 
hayır şöyle bir şey var:

Python:
def background_task():
    conn = sqlite3.connect('Hotkey_Editor.db')
    cur = conn.cursor()

    def load_hotkeys():
        global app_name, primary_key
        cur.execute("SELECT path, keys FROM hotkeys")
        hotkeys = cur.fetchall()
        for hotkey in hotkeys:
            app_name = hotkey[0]
            keys = hotkey[1]
            primary_key, secondary_key = keys.split("+")
            keyboard.add_hotkey(keys, run, args=(app_name,))
            cur.close()
            conn.close()
    load_hotkeys()
#    while True:
#        keyboard.wait()


thread = threading.Thread(target=background_task)
thread.start()


def open_gui():
    subprocess.Popen(r"C:\Users\serda\PycharmProjects\hotkey\dist\Hotkey_Editor.exe", shell=True)


def destroy():
    subprocess.call("taskkill /f /im Hotkey_Editor.exe")


icon = pystray.Icon("Hotkey Editor")
icon.menu = pystray.Menu(pystray.MenuItem("Hotkey Editor'ü aç", action=open_gui),
                         pystray.MenuItem("Çıkış", action=destroy))
icon.icon = Image.open("logo.ico")
icon.run()

uygulamanın başlangıcında arka plan görevimi başlattığım için open_gui() fonksiyonu uygulamayı açabiliyor fakat arayüze ulaşabilmesine uygulamanın başladığındaki arka plan görevi engel oluyor. Ben de diyorum ki. Öyle bir fonksiyon yazayım ki gui'yi tetiklesin.

Sınıf oluşturup ardından sınıfa nesne atasam yani şöyle bişeyler yapsam işe yarar gibime geliyor ama?

def open_gui():
app = MainApp()
app.mainloop()
Hocam öncelikle arkaplan işlemini stop etmeniz gerekmekte. Sonra gui show yapacaksınız.
 
şu şekilde güncelliyorum. Teşekkür ederim az daha bir sürü kodla uğraşacaktım...
Python:
thread = threading.Thread(target=background_task)
thread.start()


def open_gui():
    thread.join()
    subprocess.Popen(r"C:\Users\serda\PycharmProjects\hotkey\dist\Hotkey_Editor.exe", shell=True)
 
şu şekilde güncelliyorum. Teşekkür ederim az daha bir sürü kodla uğraşacaktım...
Python:
thread = threading.Thread(target=background_task)
thread.start()


def open_gui():
    thread.join()
    subprocess.Popen(r"C:\Users\serda\PycharmProjects\hotkey\dist\Hotkey_Editor.exe", shell=True)
Oda olmaz ise internette tkinter için arka planda çalışma mekaniklerini araştırın. Ben atardım ama telefondayım.
 
Oda olmaz ise internette tkinter için arka planda çalışma mekaniklerini araştırın. Ben atardım ama telefondayım.
Bakacağım olmazsa sağol.

sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 13404 and this is thread id 14404. YETEEEEEEER BIKTIM YA
 
Son düzenleme:
Bakacağım olmazsa sağol.

sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 13404 and this is thread id 14404. YETEEEEEEER BIKTIM YA
conn = sqlite3.connect('Hotkey_Editor.db', check_same_thread=False)

Bu şekil düzeltin.
 
conn = sqlite3.connect('Hotkey_Editor.db', check_same_thread=False)

Bu şekil düzeltin.
Hocam cümleten hayırlı uğurlu olsun github'ta paylaştım projemi şimdi yeni bir konu altında paylaşacağım github linkini sizin de emeğiniz geçti umarım işinize yarar. Tek sıkıntısı windows ile başlatma işini kullanıcıya yaptırmam olabilir ama basitçe anlattım 😁

@Maxtoric şaka gibi false positive sonuç yüzünden forumda paylaşamıyorum hocam kaynak kodunu atim diyorum cevap da vermiyorlar :D
 
Hocam cümleten hayırlı uğurlu olsun github'ta paylaştım projemi şimdi yeni bir konu altında paylaşacağım github linkini sizin de emeğiniz geçti umarım işinize yarar. Tek sıkıntısı windows ile başlatma işini kullanıcıya yaptırmam olabilir ama basitçe anlattım 😁

@Maxtoric şaka gibi false positive sonuç yüzünden forumda paylaşamıyorum hocam kaynak kodunu atim diyorum cevap da vermiyorlar :D
GitHub hesabınızın adı nedir?
 

Technopat Haberler

Geri
Yukarı