我希望这不是重复的帖子,但我还没有在谷歌和论坛上看到我的问题的答案。
基本上由于某种原因,当我创建一个 Entry 小部件时;当我通过 self.attributes('-fullscreen', True) 将 GUI 设置为全屏时以及启用 self.overrideredirect(True) 时,它将不允许用户从键盘进行输入。 (我要使用信息亭模式样式 GUI,因此标准用户无法退出界面)
我在这里浏览了这个链接(tkinter:无法进入条目小部件 https://stackoverflow.com/q/24499711/8168134)并发现他们的问题相似但不完全相同。我知道 Mac 上存在一些问题,但必须有其他方法来执行此任务。当我在运行 Raspbian 的 Raspberry Pi 上运行此程序时,也出现了此问题。当全屏未处于活动状态但覆盖重定向处于活动状态时,它会起作用;当覆盖重定向未激活但全屏激活时,它也可以工作。
我尝试使用 focus_force() 和 focus_set() 为小部件及其所在的框架设置焦点,但这也不起作用。
下面提供了我的相关代码。如果需要更多我的代码,请告诉我。这段代码的目的是一个用户名/密码登录方法,它将在我的程序的其余部分中被调用。
我在 Mac OS Sierra 10.12.5 上运行 PyCharm Community Edition 2017.2。提前致谢!
CODE
def admin(self, root_1):
master = tk.Tk()
text = ""
master.title("Administrator Login")
w_0, h_0 = master.winfo_screenwidth(), master.winfo_screenheight()
master.geometry("%dx%d+0+0" % (w_0, h_0))
f1 = tk.Frame(master, width=w_0, height=h_0, background="red")
f2 = tk.Frame(master, width=w_0, height=h_0, background="blue")
f1.pack(fill="both", expand=True)
f2.place(in_=f1, anchor="c", relx=.5, rely=.5)
master.wm_attributes('-topmost', 'True')
master.overrideredirect(True)
instruction_label = tk.Label(f2, text="Please type your username and password", fg="red", bg="blue",
font=("Helvetica", 26))
instruction_label.grid(row=0, columnspan=2, padx=20, pady=20)
user_label = tk.Label(f2, text="Username", font=("Helvetica", 16), bg="red")
user_entry = tk.Entry(f2, bg="red")
pass_label = tk.Label(f2, text="Password", font=("Helvetica", 16), bg="red")
pass_entry = tk.Entry(f2, bg="red", show="*")
user_label.grid(row=1, column=0, sticky=("E", "W"), padx=20, pady=10)
user_entry.grid(row=1, column=1, sticky="W", padx=20, pady=10)
pass_label.grid(row=2, column=0, sticky=("E", "W"), padx=20, pady=10)
pass_entry.grid(row=2, column=1, sticky="W", padx=20, pady=10)
user_entry.focus_force()
submit_button = tk.Button(f2, text="Submit", command=lambda: correct_login(text), bg="red", width = 20, height = 4)
submit_button.grid(row=3, column=0, sticky=("N", "S", "E"), padx=20, pady=20)
quit_button = tk.Button(f2, text="Quit", command=destroy, bg="red", width = 20, height = 4)
quit_button.grid(row=3, column=1, sticky=("N", "S", "W"), padx=20, pady=20)
user_entry.delete(0)
user_entry.insert(0, "")
pass_entry.delete(0)
pass_entry.insert(0, "")
return