【问题标题】:Tkinter/Canvas-based kiosk-like program for Raspberry Pi用于 Raspberry Pi 的基于 Tkinter/Canvas 的类似信息亭的程序
【发布时间】:2018-05-31 02:36:15
【问题描述】:

我想在 Raspberry Pi(或任何基于 Unix/Linux 的计算机)上运行一个 Python 程序,它可以有效地将整个屏幕变成一个画布,并允许我在上面绘制文本和图形对象即时的。理想情况下,我希望这也能自动隐藏桌面上的所有其他内容并消除窗口框架和任务栏,类似于以全屏模式播放视频(使用 ESC 退出)。

到目前为止,我的研究表明 Tkinter/Canvas 将是最简单的解决方案。但是,虽然我在网上找到了完成我上面描述的部分的示例,但我无法将这些部分组合成一个可以完成所有工作的形式。我之前没有使用 Tkinter 的经验也无济于事。

如果有人能指出所描述设置的最小工作示例,我将不胜感激。

【问题讨论】:

  • 使用 Canvas 获取任何示例并将选项 -fullscreen(可能还有 -topmost)添加到主窗口。

标签: python tkinter raspberry-pi tkinter-canvas kiosk


【解决方案1】:

最小的例子。它创建全屏窗口,无边框,始终位于顶部
所以你不能切换到其他窗口,即。到控制台杀死程序。

您可以按ESC 将其关闭,但如果ESC 不起作用,我会添加功能以在 5 秒后关闭 :)

它在全屏上绘制红色椭圆。

#!/usr/bin/env python3

import tkinter as tk

# --- functions ---

def on_escape(event=None):
    print("escaped")
    root.destroy()

# --- main ---

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

# --- fullscreen ---

#root.overrideredirect(True)  # sometimes it is needed to toggle fullscreen
                              # but then window doesn't get events from system
#root.overrideredirect(False) # so you have to set it back

root.attributes("-fullscreen", True) # run fullscreen
root.wm_attributes("-topmost", True) # keep on top
#root.focus_set() # set focus on window

# --- closing methods ---

# close window with key `ESC`
root.bind("<Escape>", on_escape)

# close window after 5s if `ESC` will not work
root.after(5000, root.destroy) 

# --- canvas ---

canvas = tk.Canvas(root)
canvas.pack(fill='both', expand=True)

canvas.create_oval((0, 0, screen_width, screen_height), fill='red', outline='')

# --- start ---

root.mainloop()

【讨论】:

  • furas 建议的解决方案非常接近。我必须取消注释注释行才能真正在我的 Mac 上全屏显示。但是,尽管有 root.focus_set() 语句,我仍然必须单击窗口来设置焦点。不知道为什么。因为我希望能够在没有用户干预的情况下启动程序,所以这很重要。如果最后一点可以解决,那么我会将解决方案标记为已解决。
  • 我不使用 Mac,所以我帮不上忙。但它在我的 Linux Mint 上运行没有问题。
  • 也许如果你使用after() 延迟运行focus_set(),那么它可能会起作用——但我不使用Mac 来测试它。
  • 标记为“已解决”,因为我的焦点问题可能是 Mac 特有的。
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 2011-03-22
  • 2011-01-17
  • 2020-03-04
相关资源
最近更新 更多