有很多很多的方式。首先想到的是一個命名管道(又名fifo)。下面是Python代碼(我假設python3因爲即使你的家當是python2您Tkinter的進口):
#!/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')
命名管道設計,讓許多程序寫信給他們,但只有一個方案應進行讀取數據。
如果你谷歌「進程間通信」,你會發現很多方法讓程序相互溝通。套接字或dbus可能是最常見的。 – Novel