第 2 章 サブウィンドウ

◀ 2.31 モーダルウィンドウの設定   【目  次】  2.33 クラス名とイベント処理 ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

2.32 オブジェクト名の設定と名前、パス名の取得(name、winfo_name、winfo_id、winfo_pathname)

サブウィンドウには後で説明するウィジェットも含めて、オブジェクトが作成されたときにシステムによって名前が付けられています。この名前は、ルートウィンドウからのパスを含めたパス名でオブジェクトを操作するのに用いられます。詳細は A1.11 ウィンドウ名、ウィンドウパス名を参照して下さい。

オブジェクトの名前はアプリケーションで任意の名前に設定することができます。オブジェクトの作成時に引数に「name」キーワードを用います。このキーワードはオプションとして定義されていないので、キーワードインデックスや「configure」メソッドで設定や参照はできません。また、設定する名前の先頭文字に大文字のアルファベットは使用できません。同じ種類のオブジェクトに同じ名前を設定すると、以前のオブジェクトは最新のオブジェクトに上書きされます。

オブジェクトの名前は Misc クラスの「winfo_name」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。

object.winfo_name()

オブジェクトのパス名は Misc クラスの「winfo_pathname」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。パス名については ウィンドウ名を参照して下さい。

object.winfo_pathname(id, displayof=0)

引数「id」に、パス名を取得するオブジェクトの識別子を16進数で指定します。

オブジェクトの識別子は Misc クラスの「winfo_id」メソッドで取得することができます。下記の書式を用います。詳細は Misc クラスメソッドを参照して下さい。

object.winfo_id()

オブジェクト識別子が10進整数値で得られます。

パス名は上述のメソッドを用いずに、より簡単に「str(object)」で直接オブジェクトから取得することができます。


次のプログラムはサブウィンドウ「sub」を作成しています。オブジェクト名として「name」キーワードに文字列「nameTop」を指定しています。サブウィンドウのオブジェクト名を「winfo_name」メソッドで取得して「print」出力しています。次いで、「winfo_id」メソッドでサブウィンドウのオブジェクト識別子を取得して変数「sid」に代入して、「print」出力しています。オブジェクト識別子から「winfo_pathname」メソッドでサブウィンドウのパス名を取得して「print」出力しています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
sub = tk.Toplevel(root, width=300, height=200, bg='red',
5
                    name='nameTop')
6
sub.geometry('+140+120')
7
root.update()
8
root.wm_deiconify()
9
sub.wm_deiconify()
10
print(sub.winfo_name())
11
sid = sub.winfo_id()
12
print(sid)
13
print(sub.winfo_pathname(hex(sid)), str(sub))
14
root.mainloop()

 プログラムを実行すると、サブウィンドウのオブジェクト名、オブジェクト識別子、パス名が順に「print」出力されます。

nameTop
3934116
.nameTop .nameTop