Python 基于Tkinter/Canvas的Raspberry Pi类亭程序

Python 基于Tkinter/Canvas的Raspberry Pi类亭程序,python,tkinter,raspberry-pi,tkinter-canvas,kiosk,Python,Tkinter,Raspberry Pi,Tkinter Canvas,Kiosk,我想在Raspberry Pi(或者任何基于Unix/Linux的计算机)上运行一个Python程序,它可以有效地将整个屏幕变成画布,并允许我实时在上面绘制文本和图形对象。理想情况下,我希望这也能自动隐藏桌面上的所有其他内容,并消除窗口框架和任务栏,类似于在全屏模式下播放视频(退出ESC) 到目前为止,我的研究表明Tkinter/Canvas将是最简单的解决方案。但是,虽然我在网上找到了一些例子,完成了我上面所描述的部分内容,但我还没有能够将这些部分整合在一起,形成一个完整的形式。我以前没有使用

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

到目前为止,我的研究表明Tkinter/Canvas将是最简单的解决方案。但是,虽然我在网上找到了一些例子,完成了我上面所描述的部分内容,但我还没有能够将这些部分整合在一起,形成一个完整的形式。我以前没有使用Tkinter的经验,这对我没有帮助


如果有人能给我举一个最简单的安装示例,我将不胜感激。

最简单的示例。它创建全屏窗口,无边框,始终位于顶部
所以你们不能切换到其他窗口,例如,切换到控制台来终止程序

您可以通过按
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()
#/usr/bin/env蟒蛇3
将tkinter作为tk导入
#---功能---
def on_escape(事件=无):
打印(“转义”)
root.destroy()
#---梅因---
root=tk.tk()
screen\u width=root.winfo\u screenwidth()
screen\u height=root.winfo\u screenheight()
#---全屏---
#root.overrideredirect(True)#有时需要切换全屏
#但Windows不会从系统中获取事件
#root.overrideredirect(False)#因此您必须将其设置回原位
root.attributes(“-fullscreen”,True)#全屏运行
root.wm_属性(“-toppost”,True)#保持在顶部
#root.focus_set()#在窗口上设置焦点
#---关闭方法---
#使用“ESC”键关闭窗口`
root.bind(“,在_escape上)
#如果“ESC”不起作用,5秒后关闭车窗
root.after(5000,root.destroy)
#---帆布---
canvas=tk.canvas(根)
canvas.pack(fill='both',expand=True)
画布。创建椭圆((0,0,屏幕宽度,屏幕高度),填充为红色,轮廓为“”
#---开始---
root.mainloop()

使用画布获取任何示例,并在主窗口中添加选项
-fullscreen
(可能还有
-top
)。furas建议的解决方案非常接近。我不得不取消注释评论行,这样它才能真正在我的Mac上全屏显示。但是,尽管有root.focus\u set()语句,我仍然必须单击窗口来设置焦点。不知道为什么。因为我希望能够在没有用户干预的情况下启动程序,所以这很重要。如果最后一点可以解决,那么我会将解决方案标记为已解决。我不使用Mac,所以我无能为力。但它在我的Linux Mint上运行没有问题。如果您使用
after()
延迟运行
focus\u set()
,那么它可能会工作-但我不使用Mac来测试它。标记为“已解决”,因为我的focus问题可能与Mac有关。