このモジュールを作成したとき、最初にtkinterウィンドウ(すべての設定をグローバルに)を作成しましたが、意図したとおりに機能しました。モジュールを実行するとウィンドウが機能し、入力フィールドから入力を取得して、ウェルカムメッセージまたはエラーメッセージを表示しました。しかし、それらを関数に入れると、図のように正しく機能しなくなりました。ボタンと入力が機能している状態で、グローバルに作成されたときのウィンドウの外観:
https://gyazo.com/ffcb16416b8a971c09bfa60ee9367bbd
関数内で作成されたときの外観:
https://gyazo.com/c8858a2793befafa41e71d1099f021d3
エラーメッセージがすぐにポップアップし、メインウィンドウに入力フィールドが表示されますがボタンは表示されません。
関数内にウィンドウと設定を作成したコードは次のとおりです。
def userSign(userEntry):
userId = userEntry.get()
if userId.isdigit() == True and len(userId) == 4:
welcomeWindow = tkinter.Tk()
welcomeWindow.title("Welcome")
welcomeWindow.geometry("200x50")
welcome = tkinter.Label(master=welcomeWindow, text="Welcome "+userId,font=("Helvetica", 18, "bold"))
welcome.grid()
welcomeWindow.mainloop()
else:
errorWindow = tkinter.Tk()
errorWindow.title("ERROR")
errorWindow.geometry("500x50")
error = tkinter.Label(master=errorWindow, text="ERROR: "+userId +" DOES NOT MEET CRITERIA", font=("Helvetica", 18, "bold"))
error.grid()
userId=""
errorWindow.mainloop()
def show():
window = tkinter.Tk()
window.title("Sign In")
window.geometry("250x100")
signInPrompt = tkinter.Label(master = window, text = "Enter your ID to sign in")
signInPrompt.grid(column=0,row=2)
userEntry = tkinter.Entry(master = window)
userEntry.grid(column=0,row=4)
enterButton = tkinter.Button(master = window, text="Sign in", command=userSign(userEntry))
enterButton.grid(column=0,row=6)
window.mainloop()
このモジュールは別のメインモジュールから呼び出す必要があるため、関数内で作成したときにウィンドウが正しく機能するようにするにはどうすればよいですか。
あなたは2つのインスタンスを作成していますが、Tk()
そのインスタンスは悪い考えです。代わりにToplevel()
、追加のウィンドウに使用してください。
関数内で変数またはウィジェットを作成する場合、名前はローカルスコープ内にあり、関数外では使用できません。そして、関数が終了すると、それらはゴミ収集されます。
また、@ fhdrsdgが指摘しているように、ボタンコマンドの問題。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加