2017-06-21 3 views
0

J'ai codé quelques étiquettes de texte Tkinter basiques en utilisant Python, mais je veux modifier le texte qui est à l'intérieur de l'étiquette en utilisant une commande dans le terminal Linux.Modifier python var en utilisant le terminal linux

Ceci est mon code:

#! /usr/bin/python 
from tkinter import * 
outputText = 'Libre' 

root = Tk() 

w = 70 
h = 50 

ws = root.winfo_screenwidth() 
hs = root.winfo_screenheight() 

x = (ws/10) - (w/5) 
y = (hs/5) - (h/5) 

root.geometry('%dx%d+%d+%d' % (w,h,x,y)) 

root.overrideredirect(1) 

var = StringVar() 

l = Label(root, textvariable=var) 
l.pack() 
l.place(x=10, y=10) 

var.set(outputText) 

root.mainloop() 
+0

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

Répondre

0

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.

+0

Merci, ça a marché! –