python - 使用linux终端修改python var

标签 python linux tkinter command

我使用 Python 编写了一些基本的 Tkinter 文本标签,但我想使用 Linux 终端中的命令修改标签内的文本。

这是我的代码:

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

最佳答案

有很多很多方法。我首先想到的是命名管道(又名 fifo)。这是 python 代码(我假设 python3 由于您的 tkinter 导入,即使您的 shebang 适用于 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()

此示例创建一个名为“signal”的管道,因此您写入该管道的任何内容都会在变量中设置。例如,如果您在同一文件夹中打开一个新终端并输入

echo I am a cucumber > signal

然后 tkinter 窗口中的标签更改为“我是 cucumber ”。

您还可以从任何其他程序或编程语言访问它。例如,如果您想从另一个 python 程序发送数据:

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

命名管道的设计允许多个程序向其中写入数据,但只有一个程序应该读出数据。

关于python - 使用linux终端修改python var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687948/

相关文章:

python - 以特定格式从网页中提取信息

linux - 如何修复 'sudo: no tty present and no askpass program specified' 错误?

python - 如何重置 python tkinter 按钮的背景颜色?

python - 这个简单的密码算法是否足够强大?

python - 第一个 : "Unable to find vcvarsall.bat" and Now: "TypeError: unorderable types: NonType() >= str()"

linux - 了解内核日志中的 linux hub 消息

c - 使用C获取文件名列表并将它们存储在Linux上的数组中

python - 使yfinance错误传播

python - 如何使 tkinter 上的按钮运行循环的函数?

python - 将 Python 与 mechanize 和 BeautifulSoup 捆绑在一起