【问题标题】:Embed Linux Program in Python GUI?在 Python GUI 中嵌入 Linux 程序?
【发布时间】:2023-03-30 05:07:01
【问题描述】:

我正在为我的汽车构建一个类似于 Tesla Model S 的触控界面,并且我想原生支持 Spotify。我正在使用 tkinter 在 Python 中构建我的 GUI,我想知道是否有一种方法可以从所述 GUI 的预定义框架内的 GUI 内启动 linux 程序(在本例中为 Spotify)。我想我将其视为网页中的 iframe。

我知道这可能不是最好的方法,但我的汽车将有 99% 的时间处于离线状态,因此我需要支持离线流媒体,我可以通过 Spotify 应用程序实现这一点,而不是太多使用他们的网络 API。

【问题讨论】:

  • “tkinter 终端”有大量的谷歌搜索结果,那些不能满足您的需求的原因是什么?
  • 哦等等,你是说另一个 GUI 吗?那么不,没有办法将另一个 GUI 嵌入到 tkinter 程序中。
  • 是的..这就是我的意思。还有另一种方法吗?也许使用 C 而不是 python?
  • 我不知道。一个快速的 google 建议您可以通过命令行或 dbus 控制 spotify 程序。您必须在 tkinter 中制作自己的按钮,并让它们发送命令到 spotify。

标签: python python-2.7 python-3.x tkinter


【解决方案1】:

Tkinter 能够嵌入其他基于 X11 的应用程序,但前提是 Windows 本身支持嵌入。

诀窍是获取 tkinter 小部件的 X 窗口 id,然后让其他程序写入该窗口 id。

据我所知,只有少数几个程序可以做到这一点。 xterm 是一个。我想我过去也使用过 mplayer。

这是一个使用 xterm 的非常简单的示例:

import tkinter as tk
import subprocess

root = tk.Tk()
root.geometry("400x400")

label = tk.Label(root, text="Example of xterm embedded in frame")
xterm_frame = tk.Frame(root)

label.pack(side="top", fill="x")
xterm_frame.pack(fill="both", expand=True, padx=20, pady=20)

xterm_frame_id = xterm_frame.winfo_id()
subprocess.call("xterm -into %d &" % xterm_frame_id, shell=True)

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2011-02-06
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多