#1 Le 21/01/2015, à 19:42
- totola
[Résolu]Tkinter programmation parallèle avec threading
Bonjour,
J'essaie de faire un programme graphique avec Tkinter pour communiquer (casque + micro) vers 2 pc sur le réseau local. J'aimerais pouvoir lancer une commande en cliquant sur un bouton et avant qu'elle ne soit terminée pouvoir lancer une autre commande en cliquant sur un autre bouton. Mon code ressemble pour l'instant à ça:
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
import Tkinter,os,time
from fabric.api import *
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.entryVariable = Tkinter.StringVar()
self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
#Fonction communiquer audio avec le poste coché
def OnButtonClick4():
os.system('avconv -f alsa -i hw:0,0 -acodec mp2 -b 64k -f rtp rtp://226.0.0.1:1234 &')
os.system('cvlc rtp://226.0.0.17:1235 &')
env.host_string = '{}'.format(IP7)
env.user = '{}'.format(user7)
env.password = '{}'.format(passwd7)
with settings(warn_only=True):
run("avconv -f alsa -i hw:0,0 -acodec mp2 -b 64k -f rtp rtp://226.0.0.17:1235 | cvlc rtp://226.0.0.1:1234")
def OnButtonClick3():
os.system('avconv -f alsa -i hw:0,0 -acodec mp2 -b 64k -f rtp rtp://226.0.0.1:1234 &')
os.system('cvlc rtp://226.0.0.18:1236 &')
env.host_string = '{}'.format(IP7)
env.user = '{}'.format(user7)
env.password = '{}'.format(passwd7)
with settings(warn_only=True):
run("avconv -f alsa -i hw:0,0 -acodec mp2 -b 64k -f rtp rtp://226.0.0.17:1235 | cvlc rtp://226.0.0.1:1234")
#Bouton Communiquer 1
button = Tkinter.Button(self,text=u"Poste 1",command=OnButtonClick4)
button.grid(column=2,row=3, sticky='W')
#Bouton Communiquer 2
button = Tkinter.Button(self,text=u"Poste 2",command=OnButtonClick3)
button.grid(column=1,row=3, sticky='W')
self.resizable(True,True)
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.mainloop()
Le problème c'est que lorsque je lance la communication avec un poste, le bouton reste enfoncée et je ne peux plus interagir avec le reste de mon programme...
J'ai cru comprendre que je devais utiliser des threads, mais je ne vois pas comment les intégrer dans mon programme...
MERCI
Dernière modification par totola (Le 25/01/2015, à 23:10)
Hors ligne
#2 Le 25/01/2015, à 21:18
- tiramiseb
Re : [Résolu]Tkinter programmation parallèle avec threading
Salut,
J'ai trouvé ça qui semble répondre à ta question, en cherchant sur Google :
http://stackoverflow.com/questions/1674 … m-freezing
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#3 Le 25/01/2015, à 21:25
- totola
Re : [Résolu]Tkinter programmation parallèle avec threading
Ok, j'avais vu cette page mais pas bien tout compris... Et puis je n'étais pas sûr que ça corresponde à mon problème. Mais si tu le dis, je vais me plonger sérieusement là-dedans et essayer de l'adapter chez moi. Je reviens dès que j'ai des soucis (dans pas très longtemps normalement)
Merci
Hors ligne
#4 Le 25/01/2015, à 21:44
- totola
Re : [Résolu]Tkinter programmation parallèle avec threading
J'ai l'impression que c'est ça:
1. Create a Queue object in the main thread
2. Create a new thread with access to that queue
3. Check periodically the queue in the main thread
Mais il me manque cruellement un exemple simple pour comprendre...
Hors ligne
#5 Le 25/01/2015, à 21:46
- tiramiseb
Re : [Résolu]Tkinter programmation parallèle avec threading
Pourtant, il y a un exemple juste après...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 25/01/2015, à 21:51
- totola
Re : [Résolu]Tkinter programmation parallèle avec threading
Ok je suis grillé.. Je reviens après avoir travaillé sérieusement mon sujet...
La flemme, la fatigue, le mal à la tête... et toussa...
Une bonne aspirine et je m'y remet!
@+
Dernière modification par totola (Le 25/01/2015, à 21:52)
Hors ligne
#7 Le 25/01/2015, à 22:58
- totola
Re : [Résolu]Tkinter programmation parallèle avec threading
J'ai trouvé ça qui m'a l'air étrangement simple mais semble marcher dans mon cas... ??
def handle_click():
def callback():
# Mon code ici ...
# .....
t = threading.Thread(target=callback)
t.start()
Dernière modification par totola (Le 25/01/2015, à 23:00)
Hors ligne
#8 Le 25/01/2015, à 23:00
- tiramiseb
Re : [Résolu]Tkinter programmation parallèle avec threading
Tu peux faire comme ça, oui. Et non, ce n'est pas "étrangement" simple : avec le module threading, c'est très simple de faire un thread en Python.
Après, si tu as un callback tout petit, tu peux le définir comme ça, mais si tu veux faire quelque chose de plus complexe, définis-le ailleurs...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 25/01/2015, à 23:09
- totola
Re : [Résolu]Tkinter programmation parallèle avec threading
Ok
Merci
Je passe en résolu et je vais me coucher encore moins bête... Bonne nuit
Hors ligne