私はこれがダブル投稿ではないことを願っていますが、私の質問に対する答えは特にGoogleとフォーラム全体では見られませんでした。OverrideredirectとFullscreenのTkinter Entryウィジェット
基本的に何らかの理由で、エントリウィジェットを作成するとき。 self.attributes( ' - fullscreen'、True)とself.overrideredirect(True)が有効になっているときにGUIをフルスクリーンに設定すると、キーボードからのユーザー入力を許可しません。私はここに、このリンクを介して行ってきました(tkinter: can't enter into entry widget)とそれらの問題は似ていますが、まったく同じではないことがわかっ
(私はそう標準的なユーザーインターフェイスを出ることができないキオスクモードスタイルのGUIのためのつもりです)。私はMacでこれにいくつかの問題があることを理解していますが、この作業を実行するには別の方法が必要です。この問題は、Raspbianを実行しているRaspberry Piでこれを実行したときにも発生しました。フルスクリーンがアクティブではないが、オーバーライドのリダイレクトがアクティブな場合、それは機能します。オーバーライドリダイレクトがアクティブではないにもかかわらずフルスクリーンがアクティブな場合、それも機能します。
私はfocus_force()とfocus_set()を使ってフォーカスを設定しようとしましたが、フレームは休止していますが、動作しませんでした。
私のrelaventコードは以下のとおりです。私のコードの多くが必要な場合は、私に知らせてください。このコードの目的は、私のプログラムの残りの部分で呼び出されるユーザー名/パスワードのログイン方法です。
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
ロン、私は入力とアドバイスを感謝します。私の管理メソッドのルートを渡す目的はroot.withdraw()を使って、バックグラウンドで親ウィンドウを表示させないようにすることです。フレームの後ろにある親ウィンドウの部分を見ることができるからです。次に、f2の "quit"ボタンを押すと親ウィンドウを戻すためにroot.deiconify()を使います。 (私はそれをより短く保つためのコードを投稿しなかった)。それが言われて、私はあなたが上に示したものに精通していません。 master.protocolは何をしているのですか?私はpythonに新しいので、私は謝罪します。 –
あなたが試してみると、あなたが表示されます。 tkプロトコルは、タイトルバーのウィンドウの閉じるボタンを押すと、ワープロやスプレッドシートプログラムと同じように、保存されていないデータをアプリケーションに保存させる手段です。このようにして、アプリケーションはウィンドウを閉じるだけでなく、ウィンドウを閉じる前またはウィンドウを閉じる代わりにプログラマーが何らかの作業を行うことができます。私が掲示した例では、単にメッセージを出力しますが、master.destroy()またはsys.exit()で明示的に指示しない限り、ウィンドウは破棄されません。 –