Python Language
トキンター
サーチ…
前書き
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には、 place
、 pack
、および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()
pack
とgrid
を同じフレームに混ぜて使用しないでください!そうすることで、アプリケーションのデッドロックが発生します。