Çözüldü Python Tkinter ve Discord bot aynı anda çalışamıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

FazliBasturk

Hectopat
Katılım
10 Haziran 2020
Mesajlar
793
Çözümler
7
Daha fazla  
Cinsiyet
Erkek
Python ile Discord botu yazıyorum, tkinter ile GUI yapmak istedim. Kontrol paneli gibi bir şey olacaktı... Ama tkinter ı ekleyince ve çalıştırınca bot aktif olmuyor. Tkinter ile Discord aynı anda kullanılamaz mı?
 
Çözüm
def run_mainloop(window): window.mainloop()
Bu satırı silin hocam, daha sonra da en alttaki if'in içinde kalan kodu aşağıdakiyle değiştirin, bir de öyle deneyin:


[CODE lang="python" title="Örnek kod"]if __name__ == "__main__":
t2 = threading.Thread(target=run_bot, args=(client,))
t2.start()
window.mainloop()[/CODE]
mainloop'u nerede baslatiyorsunuz?
client.run un hemen üstünde kodların en altında.
1621185166932.png
 
Pencereyi async olarak acmayi denediniz mi? Tk ve client cakisiyor gibi.
Python:
async def tkwindow():
    window.mainloop()
Sonra bu fonksiyonu client event olarak cagirmayi deneyin.
Python:
client.loop.create_task(tkwindow())
client.run(xyz)
 
Pencereyi async olarak acmayi denediniz mi? Tk ve Client cakisiyor gibi.
Python:
async def tkwindow():
 window.mainloop()
Sonra bu fonksiyonu Client Event olarak cagirmayi deneyin.
Python:
client.loop.create_task(tkwindow())
client.run(xyz)

Şimdi denedim fakat sonuç aynı, tkinter penceresi geliyor ama bot çalışmıyor.
 
Bu olayın yaşanmasının sebebi, tkinter penceresinin ana Thread'i tek başına tamamen kullanması olabilir. tkinter penceresini ya da botunuzu farklı bir thread'de ya da farklı bir process'te başlatmayı deneyin, çok büyük ihtimalle sorununuz çözülecektir.


[CODE lang="python" title="Thread örneği:"]import threading

def run_mainloop(window):
window.mainloop()

def run_bot(bot, TOKEN):
bot.run(TOKEN)

if __name__ == "__main__":
t1 = threading.Thread(target=run_mainloop, args=(window,))
t2 = threading.Thread(target=run_bot, args=(bot, TOKEN))
t1.start()
t2.start()[/CODE]

Not: Sadece botu ya da sadece tkinter mainloop'unu thread içine almanız muhtemelen yeterli olacaktır.
 
Bu olayın yaşanmasının sebebi, tkinter penceresinin ana Thread'i tek başına tamamen kullanması olabilir. Tkinter penceresini ya da botunuzu farklı bir Thread'de ya da farklı bir Process'te başlatmayı deneyin, çok büyük ihtimalle sorununuz çözülecektir.

[CODE lang="python" title="Thread örneği:"]import threading

def run_mainloop(window):
window.mainloop()

def run_bot(bot, TOKEN):
bot.run(TOKEN)

if __name__ == "__main__":
t1 = threading.Thread(target=run_mainloop, args=(window,))
t2 = threading.Thread(target=run_bot, args=(bot, TOKEN))
t1.start()
t2.start()[/CODE]

Not: Sadece botu ya da sadece tkinter Mainloop'unu thread içine almanız muhtemelen yeterli olacaktır.

İki türlü ve ikisi de aynı anda olarak denedim şimdi fakat hep bu çıkıyor:

1621233104770.png
 

Geri
Yukarı