tkinter — Tcl / TkへのPythonインターフェース—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/tkinter
移動先:案内検索

tkinter — Tcl / TkへのPythonインターフェース

ソースコード: :source: `Lib / tkinter / __ init __。py`



tkinter パッケージ(「Tkインターフェース」)は、TkGUIツールキットへの標準のPythonインターフェースです。 Tkと tkinter はどちらも、ほとんどのUnixプラットフォームとWindowsシステムで利用できます。 (Tk自体はPythonの一部ではなく、ActiveStateで維持されます。)

コマンドラインからpython -m tkinterを実行すると、シンプルなTkインターフェイスを示すウィンドウが開き、 tkinter がシステムに正しくインストールされていることと、インストールされているTcl / Tkのバージョンが示されます。 、そのバージョンに固有のTcl / Tkドキュメントを読むことができます。

も参照してください

Tkinterのドキュメント:

PythonTkinterリソース
Python Tkinterトピックガイドには、PythonからTkを使用するための多くの情報と、Tkに関する他の情報源へのリンクが記載されています。
TKDocs
広範なチュートリアルに加えて、一部のウィジェット用のより使いやすいウィジェットページ。
Tkinter 8.5リファレンス:Python用のGUI
オンライン参考資料。
effbotのTkinterドキュメント
effbot.orgがサポートするtkinterのオンラインリファレンス。
Pythonのプログラミング
Mark Lutzの本は、Tkinterの優れた報道をしています。
忙しいPython開発者のための最新のTkinter
PythonとTkinterを使用した魅力的でモダンなグラフィカルユーザーインターフェイスの構築について、MarkRosemanによる本。
PythonとTkinterプログラミング
ジョングレイソンによる本(ISBN 1-884777-81-3)。

Tcl / Tkドキュメント:

Tkコマンド
ほとんどのコマンドは、 tkinter または tkinter.ttk クラスとして利用できます。 Tcl / Tkインストールのバージョンに一致するように「8.6」を変更します。
Tcl / Tkの最近のmanページ
www.tcl.tkの最近のTcl / Tkマニュアル。
ActiveStateTclホームページ
Tk / Tclの開発は主にActiveStateで行われています。
TclとTkツールキット
Tclの発明者であるJohnOusterhoutによる本。
TclとTkでの実用的なプログラミング
ブレントウェルチの百科事典。


Tkinterモジュール

ほとんどの場合、本当に必要なのは tkinter だけですが、いくつかの追加モジュールも利用できます。 Tkインターフェイスは、_tkinterという名前のバイナリモジュールにあります。 このモジュールには、Tkへの低レベルのインターフェイスが含まれているため、アプリケーションプログラマが直接使用しないでください。 通常は共有ライブラリ(またはDLL)ですが、Pythonインタープリターと静的にリンクされている場合もあります。

Tkインターフェースモジュールに加えて、 tkinter には多数のPythonモジュールが含まれており、tkinter.constantsは最も重要なものの1つです。 tkinter をインポートすると、tkinter.constantsが自動的にインポートされるため、通常、Tkinterを使用するために必要なのは、単純なインポートステートメントだけです。

import tkinter

または、より頻繁に:

from tkinter import *
class tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)
Tk クラスは、引数なしでインスタンス化されます。 これにより、通常はアプリケーションのメインウィンドウであるTkのトップレベルウィジェットが作成されます。 各インスタンスには、独自のTclインタープリターが関連付けられています。
tkinter.Tcl(screenName=None, baseName=None, className='Tk', useTk=0)
Tcl()関数は、Tkサブシステムを初期化しないことを除いて、 Tk クラスによって作成されたものとよく似たオブジェクトを作成するファクトリ関数です。 これは、無関係なトップレベルウィンドウを作成したくない環境、または作成できない環境(XサーバーのないUnix / Linuxシステムなど)でTclインタープリターを駆動する場合に最もよく役立ちます。 Tcl()オブジェクトによって作成されたオブジェクトは、そのloadtk()メソッドを呼び出すことにより、トップレベルウィンドウを作成(およびTkサブシステムを初期化)することができます。

Tkサポートを提供する他のモジュールは次のとおりです。

tkinter.scrolledtext
垂直スクロールバーが組み込まれたテキストウィジェット。
tkinter.colorchooser
ユーザーが色を選択できるようにするダイアログ。
tkinter.commondialog
ここにリストされている他のモジュールで定義されているダイアログの基本クラス。
tkinter.filedialog
ユーザーが開くまたは保存するファイルを指定できるようにする一般的なダイアログ。
tkinter.font
フォントの操作に役立つユーティリティ。
tkinter.messagebox
標準のTkダイアログボックスへのアクセス。
tkinter.simpledialog
基本的なダイアログと便利な機能。
tkinter.dnd
tkinter のドラッグアンドドロップのサポート。 これは実験的なものであり、TkDNDに置き換えると非推奨になるはずです。
turtle
Tkウィンドウのタートルグラフィックス。


Tkinter Life Preserver

このセクションは、TkまたはTkinterのいずれかに関する完全なチュートリアルとなるようには設計されていません。 むしろ、それはストップギャップとして意図されており、システムにいくつかの入門的な方向性を提供します。

クレジット:

  • Tkは、バークレー校にいる間にJohnOusterhoutによって書かれました。
  • Tkinterは、SteenLumholtとGuidovanRossumによって作成されました。
  • このLifePreserverは、バージニア大学のMattConwayによって作成されました。
  • HTMLレンダリングといくつかの自由な編集は、KenManheimerによってFrameMakerバージョンから作成されました。
  • Fredrik Lundhは、クラスインターフェイスの説明を詳しく説明して改訂し、Tk4.2で最新のものにしました。
  • Mike Clarksonは、ドキュメントをLaTeXに変換し、リファレンスマニュアルのユーザーインターフェイスの章を編集しました。

このセクションの使用方法

このセクションは2つの部分で設計されています。前半は(大まかに)背景資料をカバーし、後半は便利なリファレンスとしてキーボードに持ち込むことができます。

「どうやって何とか」という形式の質問に答えようとするときは、ストレートTkで「何とか」を行う方法を見つけて、これを対応する tkinter 呼び出しに戻すのが最善の場合がよくあります。 Pythonプログラマーは、Tkのドキュメントを見ることで、正しいPythonコマンドを推測できることがよくあります。 つまり、Tkinterを使用するには、Tkについて少し知っておく必要があります。 このドキュメントはその役割を果たすことができないため、私たちができる最善のことは、存在する最良のドキュメントを紹介することです。 ここにいくつかのヒントがあります:

  • 著者は、Tkのmanページのコピーを入手することを強くお勧めします。 特に、manNディレクトリのマニュアルページが最も役立ちます。 man3のマニュアルページでは、TkライブラリへのCインターフェイスについて説明しているため、スクリプト作成者には特に役立ちません。
  • Addison-Wesleyは、JohnOusterhoutによるTclおよびTkToolkit(ISBN 0-201-63337-X)という本を出版しています。これは、初心者向けのTclおよびTkの優れた入門書です。 この本は網羅的ではなく、多くの詳細についてはマニュアルページに従います。
  • tkinter/__init__.pyはほとんどの人にとって最後の手段ですが、他に意味がない場合に行くのに適した場所です。


シンプルなHelloWorldプログラム

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

Tcl / Tkの(非常に)クイックルック

クラス階層は複雑に見えますが、実際には、アプリケーションプログラマーは、ほとんどの場合、階層の最下部にあるクラスを参照します。

ノート:

  • これらのクラスは、特定の関数を1つの名前空間に編成する目的で提供されています。 それらは、独立してインスタンス化されることを意図したものではありません。
  • Tk クラスは、アプリケーションで1回だけインスタンス化されることを目的としています。 アプリケーションプログラマは1つを明示的にインスタンス化する必要はなく、他のクラスのいずれかがインスタンス化されるたびにシステムが1つを作成します。
  • Widgetクラスはインスタンス化されることを意図しておらず、「実際の」ウィジェットを作成するためのサブクラス化のみを目的としています(C ++では、これは「抽象クラス」と呼ばれます)。

この参考資料を利用するには、Tkの短い文章を読む方法と、Tkコマンドのさまざまな部分を識別する方法を知る必要がある場合があります。 (以下の tkinter に相当するものについては、セクション BasicTkのTkinter へのマッピングを参照してください。)

TkスクリプトはTclプログラムです。 すべてのTclプログラムと同様に、Tkスクリプトはスペースで区切られたトークンの単なるリストです。 Tkウィジェットは、そのクラス、それを構成するのに役立つオプション、およびそれを便利なものにするアクションです。

Tkでウィジェットを作成するには、コマンドは常に次の形式になります。

classCommand newPathname options
classCommand
作成するウィジェットの種類を示します(ボタン、ラベル、メニュー…)
newPathname
このウィジェットの新しい名前です。 Tkのすべての名前は一意である必要があります。 これを強制するために、Tkのウィジェットは、ファイルシステム内のファイルと同じように、パス名で名前が付けられます。 最上位のウィジェットである root は、.(ピリオド)と呼ばれ、子はより多くのピリオドで区切られます。 たとえば、.myApp.controlPanel.okButtonはウィジェットの名前である可能性があります。
オプション
ウィジェットの外観と、場合によってはその動作を構成します。 オプションは、フラグと値のリストの形式で提供されます。 Unixシェルコマンドフラグのように、フラグの前には「-」が付き、値が複数の単語である場合は引用符で囲みます。

例えば:

button   .fred   -fg red -text "hi there"
   ^       ^     \______________________/
   |       |                |
 class    new            options
command  widget  (-opt val -opt val ...)

作成されると、ウィジェットへのパス名が新しいコマンドになります。 この新しいウィジェットコマンドは、新しいウィジェットにアクションを実行させるためのプログラマーのハンドルです。 Cでは、これをsomeAction(fred、someOptions)として表現し、C ++では、これをfred.someAction(someOptions)として表現し、Tkでは次のように表現します。

.fred someAction someOptions

オブジェクト名.fredはドットで始まることに注意してください。

ご想像のとおり、 someAction の有効な値は、ウィジェットのクラスによって異なります。.fred disableは、fredがボタンの場合は機能します(fredはグレー表示されます)が、fredがボタンの場合は機能しません。ラベル(ラベルの無効化はTkではサポートされていません)。

someOptions の有効な値はアクションに依存します。 disableのように引数を必要としないアクションもあれば、テキスト入力ボックスのdeleteコマンドのように、削除するテキストの範囲を指定するために引数が必要なアクションもあります。


基本的なTkをTkinterにマッピングする

Tkのクラスコマンドは、Tkinterのクラスコンストラクターに対応しています。

button .fred                =====>  fred = Button()

オブジェクトのマスターは、作成時にオブジェクトに付けられた新しい名前に暗黙的に含まれます。 Tkinterでは、マスターは明示的に指定されます。

button .panel.fred          =====>  fred = Button(panel)

Tkの構成オプションは、ハイフンでつながれたタグのリストとそれに続く値で示されます。 Tkinterでは、オプションはインスタンスコンストラクターのkeyword-argumentsとして指定され、configure呼び出しのkeyword-argsとして、または確立されたインスタンスの辞書スタイルのインスタンスインデックスとして指定されます。 オプションの設定については、セクションオプションの設定を参照してください。

button .fred -fg red        =====>  fred = Button(panel, fg="red")
.fred configure -fg red     =====>  fred["fg"] = red
                            OR ==>  fred.config(fg="red")

Tkで、ウィジェットに対してアクションを実行するには、ウィジェット名をコマンドとして使用し、その後にアクション名を付けます。引数(オプション)を付けることもできます。 Tkinterでは、クラスインスタンスのメソッドを呼び出して、ウィジェットのアクションを呼び出します。 特定のウィジェットが実行できるアクション(メソッド)は、tkinter/__init__.pyにリストされています。

.fred invoke                =====>  fred.invoke()

パッカー(ジオメトリマネージャー)にウィジェットを提供するには、オプションの引数を指定してpackを呼び出します。 Tkinterでは、Packクラスがこのすべての機能を保持し、さまざまな形式のpackコマンドがメソッドとして実装されます。 tkinter のすべてのウィジェットは、Packerからサブクラス化されているため、すべてのpackingメソッドを継承します。 フォームジオメトリマネージャーの詳細については、 tkinter.tix モジュールのドキュメントを参照してください。

pack .fred -side left       =====>  fred.pack(side="left")

便利なリファレンス

オプションの設定

オプションは、ウィジェットの色や境界線の幅などを制御します。 オプションは、次の3つの方法で設定できます。

オブジェクト作成時、キーワード引数を使用
fred = Button(self, fg="red", bg="blue")
オブジェクトの作成後、オプション名を辞書インデックスのように扱います
fred["fg"] = "red"
fred["bg"] = "blue"
config()メソッドを使用して、オブジェクトの作成後に複数の属性を更新します
fred.config(fg="red", bg="blue")

特定のオプションとその動作の完全な説明については、問題のウィジェットのTkマニュアルページを参照してください。

マニュアルページには、各ウィジェットの「標準オプション」と「ウィジェット固有のオプション」がリストされていることに注意してください。 前者は多くのウィジェットに共通するオプションのリストであり、後者はその特定のウィジェットに固有のオプションです。 標準オプションは、 options(3)のマニュアルページに記載されています。

このドキュメントでは、標準オプションとウィジェット固有のオプションを区別していません。 一部のオプションは、一部の種類のウィジェットには適用されません。 特定のウィジェットが特定のオプションに応答するかどうかは、ウィジェットのクラスによって異なります。 ボタンにはcommandオプションがありますが、ラベルにはありません。

特定のウィジェットでサポートされているオプションは、そのウィジェットのマニュアルページにリストされています。または、引数なしでconfig()メソッドを呼び出すか、そのウィジェットでkeys()メソッドを呼び出すことにより、実行時にクエリを実行できます。 これらの呼び出しの戻り値は、キーが文字列としてのオプションの名前(たとえば、'relief')であり、値が5タプルである辞書です。

bgなどの一部のオプションは、長い名前を持つ一般的なオプションの同義語です(bgは「背景」の省略形です)。 config()メソッドを渡すと、省略形オプションの名前は5タプルではなく2タプルを返します。 返される2タプルには、同義語の名前と「リアル」オプション(('bg', 'background')など)が含まれます。

索引 意味
0 オプション名 'relief'
1 データベースルックアップのオプション名 'relief'
2 データベースルックアップのオプションクラス 'Relief'
3 デフォルト値 'raised'
4 現在の価値 'groove'

例:

>>> print(fred.config())
{'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}

もちろん、印刷される辞書には、使用可能なすべてのオプションとその値が含まれています。 これは単なる例です。


パッカー

パッカーは、Tkのジオメトリ管理メカニズムの1つです。 ジオメトリマネージャーは、コンテナー内のウィジェットの相対的な位置を指定するために使用されます-相互のマスター。 より面倒な配置(あまり一般的に使用されないため、ここでは説明しません)とは対照的に、パッカーは定性的な関係の仕様を取ります-の左側充填など-そしてあなたのための正確な配置座標を決定するためにすべてを解決します。

master ウィジェットのサイズは、内部の「スレーブウィジェット」のサイズによって決まります。 パッカーは、スレーブウィジェットがパックされるマスター内のどこに表示されるかを制御するために使用されます。 ウィジェットをフレームにパックしたり、フレームを他のフレームにパックしたりして、希望する種類のレイアウトを実現できます。 さらに、構成がパックされると、構成の増分変更に対応するように配置が動的に調整されます。

ウィジェットは、ジオメトリマネージャでジオメトリを指定するまで表示されないことに注意してください。 ジオメトリの仕様を省略して、ウィジェットが作成されても何も表示されないことに驚かされるのは、初期のよくある間違いです。 ウィジェットは、たとえば、パッカーのpack()メソッドが適用された後にのみ表示されます。

pack()メソッドは、ウィジェットがコンテナー内のどこに表示されるか、およびメインアプリケーションウィンドウのサイズが変更されたときのウィジェットの動作を制御するキーワードとオプション/値のペアを使用して呼び出すことができます。 ここではいくつかの例を示します。

fred.pack()                     # defaults to side = "top"
fred.pack(side="left")
fred.pack(expand=1)

パッカーオプション

パッカーとそれがとることができるオプションのより詳細な情報については、ジョン・オースターハウトの本のマニュアルページと183ページを参照してください。

アンカー
アンカータイプ。 パッカーが各スレーブをその区画のどこに配置するかを示します。
拡大
ブール値、0または1
塗りつぶし
有効な値:'x''y''both''none'
ipadxとipady
距離-スレーブウィジェットの両側の内部パディングを指定します。
padxとpady
距離-スレーブウィジェットの両側に外部パディングを指定します。
有効な値は、'left''right''top''bottom'です。


ウィジェット変数の結合

一部のウィジェット(テキスト入力ウィジェットなど)の現在の値の設定は、特別なオプションを使用してアプリケーション変数に直接接続できます。 これらのオプションは、variabletextvariableonvalueoffvalue、およびvalueです。 この接続は両方の方法で機能します。何らかの理由で変数が変更された場合、接続先のウィジェットは新しい値を反映するように更新されます。

残念ながら、 tkinter の現在の実装では、variableまたはtextvariableオプションを介して任意のPython変数をウィジェットに渡すことはできません。 これが機能する変数の種類は、 tkinter で定義されているVariableと呼ばれるクラスからサブクラス化された変数のみです。

変数には、StringVarIntVarDoubleVar、およびBooleanVarという多くの便利なサブクラスがすでに定義されています。 このような変数の現在の値を読み取るには、その変数でget()メソッドを呼び出し、その値を変更するには、set()メソッドを呼び出します。 このプロトコルに従うと、ウィジェットは常に変数の値を追跡し、それ以上の介入はありません。

例えば:

import tkinter as tk

class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.pack()

        self.entrythingy = tk.Entry()
        self.entrythingy.pack()

        # Create the application variable.
        self.contents = tk.StringVar()
        # Set it to some value.
        self.contents.set("this is a variable")
        # Tell the entry widget to watch this variable.
        self.entrythingy["textvariable"] = self.contents

        # Define a callback for when the user hits return.
        # It prints the current value of the variable.
        self.entrythingy.bind('<Key-Return>',
                             self.print_contents)

    def print_contents(self, event):
        print("Hi. The current entry content is:",
              self.contents.get())

root = tk.Tk()
myapp = App(root)
myapp.mainloop()

ウィンドウマネージャー

Tkには、ウィンドウマネージャーと対話するためのユーティリティコマンドwmがあります。 wmコマンドのオプションを使用すると、タイトル、配置、アイコンビットマップなどを制御できます。 tkinter では、これらのコマンドはWmクラスのメソッドとして実装されています。 トップレベルウィジェットはWmクラスからサブクラス化されているため、Wmメソッドを直接呼び出すことができます。

特定のウィジェットを含むトップレベルウィンドウにアクセスするには、多くの場合、ウィジェットのマスターを参照するだけです。 もちろん、ウィジェットがフレーム内にパックされている場合、マスターはトップレベルウィンドウを表しません。 任意のウィジェットを含むトップレベルウィンドウにアクセスするには、_root()メソッドを呼び出すことができます。 このメソッドは、この関数が実装の一部であり、Tk機能へのインターフェイスではないことを示すアンダースコアで始まります。

典型的な使用法のいくつかの例を次に示します。

import tkinter as tk

class App(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()

# create the application
myapp = App()

#
# here are method calls to the window manager class
#
myapp.master.title("My Do-Nothing Application")
myapp.master.maxsize(1000, 400)

# start the program
myapp.mainloop()

Tkオプションのデータ型

アンカー

法定値はコンパスのポイントです:"n""ne""e""se""s""sw""w""nw"、および"center"

ビットマップ

名前付きビットビットには、'error''gray25''gray50''hourglass''info'、 [X100Xの8つが組み込まれています。 ]、'question''warning'。 Xビットマップファイル名を指定するには、"@/usr/contrib/bitmap/gumby.bit"のように、ファイルへのフルパスを@で始まるように指定します。

ブール値

整数0または1、あるいは文字列"yes"または"no"を渡すことができます。

折り返し電話

これは、引数をとらないPython関数です。 例えば:

def print_it():
    print("hi there")
fred["command"] = print_it

色は、rgb.txtファイルのX色の名前として、または4ビットのRGB値を表す文字列として指定できます:"#RGB"、8ビット:"#RRGGBB"、12ビット」"#RRRGGGBBB"、または16ビット"#RRRRGGGGBBBB"の範囲。ここで、R、G、Bは任意の有効な16進数字を表します。 詳細については、Ousterhoutの本の160ページを参照してください。

カーソル

cursorfont.hの標準Xカーソル名は、XC_プレフィックスなしで使用できます。 たとえば、ハンドカーソル(XC_hand2)を取得するには、文字列"hand2"を使用します。 独自のビットマップとマスクファイルを指定することもできます。 Ousterhoutの本の179ページを参照してください。

距離

画面の距離は、ピクセルまたは絶対距離のいずれかで指定できます。 ピクセルは数値で示され、絶対距離は文字列で示され、末尾の文字は単位を示します。センチメートルの場合はc、インチの場合はi、ミリメートルの場合はm、 [X187X ]プリンタのポイント。 たとえば、3.5インチは"3.5i"として表されます。

フォント

Tkは、{courier 10 bold}などのリストフォント名形式を使用します。 正の数のフォントサイズはポイントで測定されます。 負の数のサイズはピクセル単位で測定されます。

ジオメトリ

これはwidthxheightの形式の文字列で、幅と高さはほとんどのウィジェットのピクセル単位(テキストを表示するウィジェットの文字数)で測定されます。 例:fred["geometry"] = "200x100"

正当化する

有効な値は、"left""center""right"、および"fill"の文字列です。

領域

これは、スペースで区切られた4つの要素を持つ文字列であり、それぞれが有効な距離です(上記を参照)。 例:"2 3 4 5""3i 2i 4.5i 2i""3c 2c 4c 10.43c"はすべて合法的な地域です。

安心

ウィジェットの境界線スタイルを決定します。 有効な値は、"raised""sunken""flat""groove"、および"ridge"です。

scrollcommand

これはほとんどの場合、一部のスクロールバーウィジェットのset()メソッドですが、単一の引数を取る任意のウィジェットメソッドにすることができます。

包む:

"none""char"、または"word"のいずれかである必要があります。


バインディングとイベント

ウィジェットコマンドのbindメソッドを使用すると、特定のイベントを監視し、そのイベントタイプが発生したときにコールバック関数をトリガーできます。 bindメソッドの形式は次のとおりです。

def bind(self, sequence, func, add=''):

どこ:

順序
イベントのターゲットの種類を示す文字列です。 (詳細については、バインドマンページとジョンオースターハウトの本の201ページを参照してください)。
func
はPython関数であり、1つの引数を取り、イベントが発生したときに呼び出されます。 イベントインスタンスが引数として渡されます。 (この方法でデプロイされた関数は、一般にコールバックとして知られています。)
追加
または'+'のいずれかはオプションです。 空の文字列を渡すことは、このバインディングが、このイベントが関連付けられている他のバインディングを置き換えることを意味します。 '+'を渡すことは、この関数がこのイベントタイプにバインドされた関数のリストに追加されることを意味します。

例えば:

def turn_red(self, event):
    event.widget["activeforeground"] = "red"

self.button.bind("<Enter>", self.turn_red)

turn_red()コールバックでイベントのウィジェットフィールドにアクセスしていることに注目してください。 このフィールドには、Xイベントをキャッチしたウィジェットが含まれています。 次の表に、アクセスできる他のイベントフィールドと、それらがTkでどのように示されるかを示します。これは、Tkのマニュアルページを参照するときに役立ちます。

Tk Tkinterイベントフィールド Tk Tkinterイベントフィールド
%f 集中 %NS char
%NS 身長 %E send_event
%k キーコード %K keysym
%s %NS keysym_num
%NS 時間 %NS タイプ
%w %W ウィジェット
%x x %X x_root
%y y %Y y_root


インデックスパラメータ

多くのウィジェットでは、「インデックス」パラメータを渡す必要があります。 これらは、テキストウィジェットの特定の場所、エントリウィジェットの特定の文字、またはメニューウィジェットの特定のメニュー項目を指すために使用されます。

エントリウィジェットのインデックス(インデックス、ビューインデックスなど)
エントリウィジェットには、表示されているテキスト内の文字の位置を参照するオプションがあります。 これらの tkinter 関数を使用して、テキストウィジェットのこれらの特別なポイントにアクセスできます。
テキストウィジェットのインデックス
テキストウィジェットのインデックス表記は非常に豊富で、Tkのマニュアルページで最もよく説明されています。
メニューインデックス(menu.invoke()、menu.entryconfig()など)
メニューの一部のオプションとメソッドは、特定のメニューエントリを操作します。 オプションまたはパラメータにメニューインデックスが必要な場合はいつでも、次のものを渡すことができます。
  • 0から始まる、ウィジェット内のエントリの数値位置を上から数えて参照する整数。
  • 文字列"active"。これは現在カーソルの下にあるメニュー位置を参照します。
  • 最後のメニュー項目を参照する文字列"last"
  • @6のように、@が前に付いた整数。この整数は、メニューの座標系のピクセル座標として解釈されます。
  • 文字列"none"は、メニューエントリがまったくないことを示します。ほとんどの場合、menu.activate()とともに使用され、すべてのエントリが非アクティブ化されます。最後に、
  • メニューの上部から下部に向かってスキャンされた、メニューエントリのラベルとパターンが一致するテキスト文字列。 このインデックスタイプは他のすべての後に考慮されることに注意してください。つまり、lastactive、またはnoneというラベルの付いたメニュー項目の一致は、代わりに上記のリテラルとして解釈される場合があります。 。


画像

tkinter.Imageの対応するサブクラスを使用して、さまざまな形式の画像を作成できます。

  • XBM形式の画像の場合はBitmapImage
  • PhotoImageは、PGM、PPM、GIF、およびPNG形式の画像用です。 後者はTk8.6以降でサポートされています。

どちらのタイプのイメージも、fileまたはdataオプションのいずれかを使用して作成されます(他のオプションも使用できます)。

画像オブジェクトは、imageオプションがウィジェットでサポートされている場所であればどこでも使用できます(例: ラベル、ボタン、メニュー)。 このような場合、Tkは画像への参照を保持しません。 画像オブジェクトへの最後のPython参照が削除されると、画像データも削除され、Tkは画像が使用された場所に空のボックスを表示します。

も参照してください

Pillow パッケージは、BMP、JPEG、TIFF、WebPなどの形式のサポートを追加します。


ファイルハンドラー

Tkを使用すると、ファイル記述子でI / Oが可能な場合に、Tkメインループから呼び出されるコールバック関数を登録および登録解除できます。 ファイル記述子ごとに登録できるハンドラーは1つだけです。 コード例:

import tkinter
widget = tkinter.Tk()
mask = tkinter.READABLE | tkinter.WRITABLE
widget.tk.createfilehandler(file, mask, callback)
...
widget.tk.deletefilehandler(file)

この機能はWindowsでは使用できません。

読み取りに使用できるバイト数がわからないため、 BufferedIOBase または TextIOBase read()または readlineを使用したくない場合があります。 ()メソッド。これらは、事前定義されたバイト数の読み取りを要求するためです。 ソケットの場合、 recv()または recvfrom()メソッドは正常に機能します。 他のファイルの場合は、raw読み取りまたはos.read(file.fileno(), maxbytecount)を使用します。

Widget.tk.createfilehandler(file, mask, func)

ファイルハンドラコールバック関数 func を登録します。 file 引数は、 fileno()メソッドを持つオブジェクト(ファイルまたはソケットオブジェクトなど)、または整数ファイル記述子のいずれかです。 mask 引数は、以下の3つの定数のいずれかのOR演算の組み合わせです。 コールバックは次のように呼び出されます。

callback(file, mask)
Widget.tk.deletefilehandler(file)
ファイルハンドラーの登録を解除します。
tkinter.READABLE

tkinter.WRITABLE
tkinter.EXCEPTION

mask 引数で使用される定数。