2017-06-21 6 views
0

Pythonを使っていくつかの基本的なTkinterテキストラベルをコーディングしましたが、Linux端末でコマンドを使ってラベル内のテキストを修正したいと思います。Linux端末でpython varを修正する

これは私のコードです:

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

"プロセス間通信"をグーグルにすると、プログラム間で多くの通信方法が見つかるでしょう。ソケットやdbusがおそらく最も一般的です。 – Novel

答えて

0

多くの多くの方法があります。私の頭に浮かぶ最初のものは名前付きパイプ(別名FIFO)です。ここではPythonのコードは、(私はあなたのシェバングはpython2のためであっても起因するあなたのTkinterのインポートにのpython3を仮定している)だ:

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

この例では、「信号」という名前のパイプを作成しますので、そのパイプにあなたが書いたものが設定されます変数の中に入れます。たとえば、あなたは同じフォルダに新しいターミナルを開き、入力した場合

echo I am a cucumber > signal 

その後、「私はキュウリだ」とTkinterのウィンドウの変更でラベル。

他のプログラムやプログラミング言語からもアクセスできます。たとえば、あなたは別のPythonプログラムからデータを送信する場合:

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

名前付きパイプは多くのプログラムがそれらに書き込むことができるように設計されていますが、1つのプログラムだけがデータを読み出す必要があります。

+0

ありがとう、それは働いた! –

関連する問題