Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

Python:サブフォームを入力フォームとして表示

4月
7
2023
Back
Alt+HOME


何となく理解を進めるために作っていたメインサブのフォーム遷移に関して、土壺にはまってしまった記録

過日インストールした tkinter を使って設定用の入力画面を作ってみようとテストをしている途中で、 どうも1行デリートしてしまったまま気づかず悪戦苦闘してしまっていたと言うのが結論でした。

とにかく正しい例から


  1. やりたかったことは次の通りです。

  2. import tkinter as tk
    
    # サブウインドウを生成してラベルを配置する関数
    def create_new_window():
        new_window = tk.Toplevel(root)
        new_window.title("SUB")
        new_window.geometry("200x100+150+150")
        new_window.focus_set()
        label = tk.Label(new_window, text="新しいウィンドウ")
        label.pack()
    
    # メインウインドウを起動時生成し、サブウィンドウ作成ボタンを配置
    root = tk.Tk()
    root.title("MAIN")
    root.geometry("200x200+100+100")
    button = tk.Button(root, text="新しいウィンドウを作成する", command=create_new_window)
    button.pack()
    root.mainloop()
    

    これを実行するとトップ画像の様に、先ず MAIN のウィンドウが表示され、[新しいウィンドウを作成する] ボタンをクリックすると、 SUB のウィンドウが表示されると同時に、SUB 上にレベルである「新しいウィンドウ」の文字が現れます。

  3. これが、アプリのメインフォームの [Settings] のボタンをクリックすると設定項目の入力画面が出るという場面で使いたかったのですが実際は、 項目内の属性指定も一行では長くなるので次の様に記述しました。

  4. label = tk.Label(
    	new_window,
    	text="新しいウィンドウ"
    	)
    

    色々試しているうちに new_window, の一行を消したことに気づかず、またこの行がこの文脈で何を意味するのかほぼ無知でした。 結果は、SUBウィンドウにではなく MAINウィンドウに「新しいウィンドウ」と表示さてしまいました。

    この表記が無い場合のデフォルトは 元ウィンドウ である事がよくよく理解できました。

    又、この create_new_window() を別ファイルにすることも、クラスにして呼び出すことも同様にできると言うことも分かりました。 なお、最も大事なことは new_window = tk.Toplevel(root) の様にTopleve属性で別ウィンドウを派生させることが必要と言うことです。


Back
Alt+HOME