2.32 オブジェクト名の設定と名前、パス名の取得(name、winfo_name、winfo_id、winfo_pathname)
サブウィンドウには後で説明するウィジェットも含めて、オブジェクトが作成されたときにシステムによって名前が付けられています。この名前は、ルートウィンドウからのパスを含めたパス名でオブジェクトを操作するのに用いられます。詳細は A1.11 ウィンドウ名、ウィンドウパス名を参照して下さい。
オブジェクトの名前はアプリケーションで任意の名前に設定することができます。オブジェクトの作成時に引数に「name」キーワードを用います。このキーワードはオプションとして定義されていないので、キーワードインデックスや「configure」メソッドで設定や参照はできません。また、設定する名前の先頭文字に大文字のアルファベットは使用できません。同じ種類のオブジェクトに同じ名前を設定すると、以前のオブジェクトは最新のオブジェクトに上書きされます。
オブジェクトの名前は Misc クラスの「winfo_name」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。
オブジェクトのパス名は Misc クラスの「winfo_pathname」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。パス名については ウィンドウ名を参照して下さい。
引数「id」に、パス名を取得するオブジェクトの識別子を16進数で指定します。
オブジェクトの識別子は Misc クラスの「winfo_id」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。
オブジェクト識別子が10進整数値で得られます。
パス名は上述のメソッドを用いずに、より簡単に「str(object)」で直接オブジェクトから取得することができます。
次のプログラムはサブウィンドウ「sub」を作成しています。オブジェクト名として「name」キーワードに文字列「nameTop」を指定しています。サブウィンドウのオブジェクト名を「winfo_name」メソッドで取得して「print」出力しています。次いで、「winfo_id」メソッドでサブウィンドウのオブジェクト識別子を取得して変数「sid」に代入して、「print」出力しています。オブジェクト識別子から「winfo_pathname」メソッドでサブウィンドウのパス名を取得して「print」出力しています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red', | |
name='nameTop') | |
sub.geometry('+140+120') | |
root.update() | |
root.wm_deiconify() | |
sub.wm_deiconify() | |
print(sub.winfo_name()) | |
sid = sub.winfo_id() | |
print(sid) | |
print(sub.winfo_pathname(hex(sid)), str(sub)) | |
root.mainloop() |
プログラムを実行すると、サブウィンドウのオブジェクト名、オブジェクト識別子、パス名が順に「print」出力されます。
3934116
.nameTop .nameTop