Il y a beaucoup de plusieurs façons. Le premier qui me vient à l'esprit est un tube nommé (aka fifo). Voici le code python (je suppose python3 en raison de votre importation tkinter même si votre tralala est pour python2):
#!/usr/bin/env python3
import tkinter as tk
import os
import stat
from threading import Thread
class FIFO(Thread):
def __init__(self, pipename, func):
self.pipename = pipename
if pipename in os.listdir('.'):
if not stat.S_ISFIFO(os.stat(self.pipename).st_mode):
raise ValueError("file exists but is not a pipe")
else:
os.mkfifo(pipename)
Thread.__init__(self)
self.func = func
self.daemon = True
self.start()
def run(self):
while True:
with open(self.pipename) as f: # blocks
self.func(f.read())
def close(self):
os.remove(self.pipename)
root = tk.Tk()
var = tk.StringVar(value='Libre')
# pipes the content of the named pipe "signal" to the function "var.set"
pipe = FIFO("signal", var.set)
l = tk.Label(root, textvariable=var)
l.pack(fill=tk.BOTH, expand=True)
root.geometry("200x100")
root.mainloop()
pipe.close()
Cet exemple crée un tube nommé « signal », donc tout ce que vous écrivez à ce tuyau se prépare dans la variable. Par exemple, si vous ouvrez un nouveau terminal dans le même dossier et tapez
echo I am a cucumber > signal
Ensuite, l'étiquette dans la fenêtre change de tkinter à « Je suis un concombre ».
Vous pouvez également y accéder depuis n'importe quel autre programme ou langage de programmation. Par exemple, si vous voulez envoyer des données à partir d'un autre programme python:
with open('signal', 'w') as f:
f.write('I am a banana')
Les canaux nommés sont conçus pour permettre à de nombreux programmes de les écrire, mais un seul programme devrait lire les données sur.
Si vous consultez google "communication interprocessus", vous trouverez de nombreuses façons de communiquer entre eux. Sockets ou dbus est probablement le plus commun. – Novel