Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/01/2015, à 20: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 smile

Dernière modification par totola (Le 26/01/2015, à 00:10)

Hors ligne

#2 Le 25/01/2015, à 22: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

Hors ligne

#3 Le 25/01/2015, à 22: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) big_smile
Merci

Hors ligne

#4 Le 25/01/2015, à 22: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... hmm

Hors ligne

#5 Le 25/01/2015, à 22:46

tiramiseb

Re : [Résolu]Tkinter programmation parallèle avec threading

Pourtant, il y a un exemple juste après...

Hors ligne

#6 Le 25/01/2015, à 22: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... tongue

La flemme, la fatigue, le mal à la tête...  et toussa...
Une bonne aspirine et je m'y remet! smile
@+

Dernière modification par totola (Le 25/01/2015, à 22:52)

Hors ligne

#7 Le 25/01/2015, à 23: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 26/01/2015, à 00:00)

Hors ligne

#8 Le 26/01/2015, à 00: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...

Hors ligne

#9 Le 26/01/2015, à 00:09

totola

Re : [Résolu]Tkinter programmation parallèle avec threading

Ok  wink
Merci
Je passe en résolu et je vais me coucher encore moins bête... Bonne nuit smile

Hors ligne