Tkinter - 显示没有标题栏和屏幕键盘的全屏应用程序 (Linux)
Tkinter - Displaying a fullscreen app without a title bar and with an on screen keyboard (Linux)
我正在尝试在 raspberry pi 上创建全屏 tkinter 应用程序。该应用程序需要有一个屏幕键盘(它在触摸屏上使用)。我也希望没有标题栏(我不希望人们能够关闭应用程序,而且它看起来更干净)。除了使用 zoomed 属性的标题栏之外,我已经能够使所有这些工作正常,但它不能与我发现的任何其他删除标题栏的方法结合使用。我使用的键盘是基于 raspbian 的 florence raspberry pi 3B+。以下是我尝试过的案例。
Overrideredirect 和 fullscreen 属性不允许屏幕键盘工作(它在应用程序后面打开)。
splash 属性非常接近工作,问题是我的 Entry 小部件不起作用(当我点击它们时,光标不会弹出,我实际上可以返回 python 和光标弹出但输入 python。我认为这是因为应用程序落后于 Python)。这与 root.geometry 结合使用以全屏显示应用程序。
我找到了两个类似的堆栈溢出问题 and 。第一个问题不需要全屏(这是我当前代码所在的位置),第二个不需要键盘。
root = tk.Tk()
root.attributes('-zoomed', True)
#width = root.winfo_screenwidth()
#height = root.winfo_screenheight()
#root.geometry("%dx%d+0+0" % (width, height))
#root.wm_attributes('fullscreen', True)
#root.overrideredirect(True)
#root.attributes('-type', 'splash')
root.mainloop()
有一个解决方法可以使用 splash 属性:您可以将条目上的点击绑定到 entry.focus_force()
,这样您就可以输入条目。这是一个小例子:
import tkinter as tk
root = tk.Tk()
root.attributes("-fullscreen", True)
root.attributes("-type", "splash")
root.bind_class("Entry", "<1>", lambda ev: ev.widget.focus_force())
entry = tk.Entry(root)
entry.pack()
tk.Button(root, text="Close", command=root.destroy).pack()
root.mainloop()
注意:我使用了 class 绑定到 tk.Entry
:
root.bind_class("Entry", "<1>", lambda ev: ev.widget.focus_force())
使其适用于程序中的所有tk.Entry
。但是,如果想要使用不同的 class 小部件,例如ttk.Entry
,必须将 class 绑定修改为
root.bind_class(<class name>, "<1>", lambda ev: ev.widget.focus_force())
其中 <class name>
将是 ttk.Entry
的“TEntry”,ttk.Combobox
的“TCombobox”或 tk.Text
的“文本”。
我正在尝试在 raspberry pi 上创建全屏 tkinter 应用程序。该应用程序需要有一个屏幕键盘(它在触摸屏上使用)。我也希望没有标题栏(我不希望人们能够关闭应用程序,而且它看起来更干净)。除了使用 zoomed 属性的标题栏之外,我已经能够使所有这些工作正常,但它不能与我发现的任何其他删除标题栏的方法结合使用。我使用的键盘是基于 raspbian 的 florence raspberry pi 3B+。以下是我尝试过的案例。
Overrideredirect 和 fullscreen 属性不允许屏幕键盘工作(它在应用程序后面打开)。
splash 属性非常接近工作,问题是我的 Entry 小部件不起作用(当我点击它们时,光标不会弹出,我实际上可以返回 python 和光标弹出但输入 python。我认为这是因为应用程序落后于 Python)。这与 root.geometry 结合使用以全屏显示应用程序。
我找到了两个类似的堆栈溢出问题
root = tk.Tk()
root.attributes('-zoomed', True)
#width = root.winfo_screenwidth()
#height = root.winfo_screenheight()
#root.geometry("%dx%d+0+0" % (width, height))
#root.wm_attributes('fullscreen', True)
#root.overrideredirect(True)
#root.attributes('-type', 'splash')
root.mainloop()
有一个解决方法可以使用 splash 属性:您可以将条目上的点击绑定到 entry.focus_force()
,这样您就可以输入条目。这是一个小例子:
import tkinter as tk
root = tk.Tk()
root.attributes("-fullscreen", True)
root.attributes("-type", "splash")
root.bind_class("Entry", "<1>", lambda ev: ev.widget.focus_force())
entry = tk.Entry(root)
entry.pack()
tk.Button(root, text="Close", command=root.destroy).pack()
root.mainloop()
注意:我使用了 class 绑定到 tk.Entry
:
root.bind_class("Entry", "<1>", lambda ev: ev.widget.focus_force())
使其适用于程序中的所有tk.Entry
。但是,如果想要使用不同的 class 小部件,例如ttk.Entry
,必须将 class 绑定修改为
root.bind_class(<class name>, "<1>", lambda ev: ev.widget.focus_force())
其中 <class name>
将是 ttk.Entry
的“TEntry”,ttk.Combobox
的“TCombobox”或 tk.Text
的“文本”。