サーチ…


前書き

TkinterでリリースされたPythonの最も一般的なGUI(グラフィカルユーザインタフェース)ライブラリです。このトピックでは、このライブラリとその機能の適切な使用方法について説明します。

備考

tkinterモジュールの大文字はPython 2と3で異なります。Python 2の場合、次のようにします:

from Tkinter import *  # Capitalized

Python 3の場合、次のコードを使用します。

from tkinter import *  # Lowercase

Python 2とPython 3の両方で動作するコードでは、

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

または

from sys import version_info
if version_info.major == 2:
    from Tkinter import *
elif version_info.major == 3:
    from tkinter import *

詳細は、 tkinterのドキュメントを参照してください。

最小限のtkinterアプリケーション

tkinterはTk / Tcl GUIライブラリのラッパーを提供するGUIツールキットで、Pythonに含まれています。次のコードは、 tkinterを使用して新しいウィンドウを作成し、ウィンドウ本体にテキストを配置します。

注意:Python 2では、大文字と小文字は少し異なる場合があります。後述の「備考」を参照してください。

import tkinter as tk

# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
    def __init__(self, master):
        # Call superclass constructor
        tk.Frame.__init__(self, master)
        # Place frame into main window
        self.grid()
        # Create text box with "Hello World" text
        hello = tk.Label(self, text="Hello World! This label can hold strings!")
        # Place text box into frame
        hello.grid(row=0, column=0)

# Spawn window
if __name__ == "__main__":
    # Create main window object
    root = tk.Tk()
    # Set title of window
    root.title("Hello World!")
    # Instantiate HelloWorldFrame object
    hello_frame = HelloWorldFrame(root)
    # Start GUI
    hello_frame.mainloop()

ジオメトリマネージャ

Tkinterには、 placepack 、およびgrid 3つのジオメトリ管理メカニズムがあります。

placeマネージャは絶対ピクセル座標を使用します。

packマネージャーはウィジェットを4つの側面のいずれかに配置します。新しいウィジェットは、既存のウィジェットの隣に配置されます。

gridマネージャは、動的にサイズ変更するスプレッドシートと同様に、ウィジェットをgrid配置します。

場所

widget.placeの最も一般的なキーワード引数は次のとおりです。

  • x 、ウィジェットの絶対x座標
  • y 、ウィジェットの絶対y座標
  • height 、ウィジェットの絶対的な高さ
  • width 、ウィジェットの絶対幅

placeを使用したコード例:

class PlaceExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(master,text="This is on top at the origin")
        #top_text.pack()
        top_text.place(x=0,y=0,height=50,width=200)
        bottom_right_text=Label(master,text="This is at position 200,400")
        #top_text.pack()
        bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
    root=Tk()
    place_frame=PlaceExample(root)
    place_frame.mainloop()

パック

widget.packは次のキーワード引数を取ることができます:

  • 親によって残された空白を埋めるかどうかをexpand
  • fill 、すべての領域を塗りつぶす(NONE(デフォルト)、X、Y、BOTHのいずれか)
  • side 、パックする側(TOP(デフォルト)、BOTTOM、LEFT、またはRIGHT)

グリッド

widget.gridの最も一般的に使用されるキーワード引数は次のとおりです:

  • row 、ウィジェットの行(デフォルトでは最小の空)
  • rowspan 、ウィジェットのスパン数(デフォルトは1)
  • column 、ウィジェットの列(デフォルトは0)
  • columnspan 、ウィジェットがまたがる列の数(デフォルトは1)
  • stickyグリッドセルが(N、NE、E、SE、S、SW、W、NWの組み合わせ)よりも大きい場合、ここでウィジェットを配置します

行と列のインデックスはゼロです。行が減少し、列が右に増加します。

gridを使用したコード例:

from tkinter import *

class GridExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(self,text="This text appears on top left")
        top_text.grid() # Default position 0, 0
        bottom_text=Label(self,text="This text appears on bottom left")
        bottom_text.grid() # Default position 1, 0
        right_text=Label(self,text="This text appears on the right and spans both rows",
                         wraplength=100)
        # Position is 0,1
        # Rowspan means actual position is [0-1],1
        right_text.grid(row=0,column=1,rowspan=2)

# Spawn Window
if __name__=="__main__":
    root=Tk()
    grid_frame=GridExample(root)
    grid_frame.mainloop()

packgridを同じフレームに混ぜて使用しないでください!そうすることで、アプリケーションのデッドロックが発生します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow