2017-06-21 3 views
0

I codiert einige grundlegende Tkinter beschrifteten Python, aber ich möchte den Text ändern, die im Inneren des Etiketts ist ein Befehl im Terminal Linux verwenden.Ändern Python var mit Linux Terminal

Dies ist mein 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

Wenn Sie google „Interprozess-Kommunikation“ Sie viele Möglichkeiten für Programme miteinander kommunizieren finden. Sockets oder dbus ist wahrscheinlich am häufigsten. – Novel

Antwort

0

Es gibt viele viele Möglichkeiten. Das erste, was mir einfällt, ist eine Named Pipe (alias Fifo). Hier ist der Python-Code (Ich gehe davon aus python3 aufgrund Ihres tkinter Import obwohl Ihr shebang für python2 ist):

#!/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() 

dieses Beispiel wird ein Rohr namens „Signal“, so alles, was Sie schreiben, dass Rohr gesetzt wird in der Variable. Zum Beispiel wenn Sie öffnen ein neues Terminal im selben Ordner und

echo I am a cucumber > signal 

Dann wird das Etikett in den tkinter Fenster Änderungen geben an: „Ich bin eine Gurke“.

Sie können dies auch Zugriff aus anderen Programmen oder Programmiersprache. Zum Beispiel, wenn Sie wollen Daten von einem anderen Python-Programm senden:

with open('signal', 'w') as f: 
    f.write('I am a banana') 

Named Pipes ist entworfen, um viele Programme zu erlauben, sie zu schreiben, aber nur ein Programm sollte die Daten ausgelesen.

+0

Danke, es hat funktioniert! –