Pythonシステム学習ノート17(tkinter:GUI、コンポーネントButton/Entry/Label/Menu/Canvasなど、手順、コンポーネントレイアウトpack/gridなど、メッセージメカニズム、バインド、メニュー、canvasキャンバス)
12366 ワード
GUI紹介 GraphicalUserInterface, GUI for Python: Tkinter, wxPython, PyQt TKinter: バインドTK GUIツールセット、用途PythonパッケージTclコード PyGTK Tkinterの代替品 wxPython プラットフォームにまたがるPython GUI PyQt プラットフォームにまたがる 商業授権は、問題 によって行われる可能性がある.
推奨資料 辛星GUI、辛星Python Python GUI Programming cookbook Tkinter reference a GUI for Python
フレーム:
Tkinter共通コンポーネントボタン テキスト入力コンポーネント タグアセンブリ メニュー スクロールバー その他のコンポーネント コンポーネントの概略使用手順総パネル を作成する.パネルのさまざまなコンポーネントを作成 コンポーネントの親コンポーネント、すなわち依存関係 を指定する.は、対応する属性を利用してコンポーネントを設定 である.コンポーネントにレイアウト を配置する
同期フラッシュ2は類似しており、複数のコンポーネント を作成する.最後に、総パネルのメッセージループ が開始する. Labelの例 Label設定例
Buttonのプロパティ: Buttonのケース
コンポーネントレイアウト制御ユニットの配置方式 の3つのレイアウト: pack:方位配置 place:座標レイアウト grid:グリッドレイアウト packレイアウト は最も簡単で、コードの量は最も少なくて、1つごとに配置して、デフォルトは上から倒れて、システムは自動的に を設定しますの一般的な使用方法は、コンポーネントオブジェクトである.Pack(設定、、、、、、、) side:ドッキング方位、オプション値はLEFT、TOP、RIGHT、BOTTON fill:充填方式,X,Y,BOTH,NONE expande: YES/NO anchor: N,E,S,W,CENTER ipadx:x方向の内辺距離 ipady: y padx:x方向外境界 pady: y…
gridレイアウト 共通使用方式:コンポーネントオブジェクト.grid(設定) row,column番号は,いずれも0から である. sticky:N,S,W,Eは上下左右を表し、コンポーネントがどの方向から始まるかを決定するための である.はipadx,padxなどのパラメータをサポートし、pack関数の意味と同じ をサポートする.はrowspan,columnspanをサポートし、行間、列間の数 を表します.
placeレイアウト 明確な方位の配置 相対位置レイアウト、ウィンドウサイズを勝手に変更すると混乱 place関数を使用し、絶対レイアウトと相対レイアウトに分け、絶対レイアウトはx、yパラメータ を使用する.相対レイアウトrelx,rely,relheight,relwidth を使用
packレイアウトケース gridレイアウトケース
メッセージメカニズムメッセージの伝達メカニズム イベント/メッセージを自動的に発行する メッセージは、システムがキュー に送信する責任を負う.関連コンポーネントによるバインド/設定 バックエンドは、関心のあるイベントを自動的に選択し、対応する反応を示す .
メッセージ形式:
:Buttonはボタンイベントを表し、1はマウスの左ボタンを表し、2は中ボタン を表す.:キーボードAキー :同時にControl,Shift,Aの3つのキー を押す:F 1キーボード キービット対応名称
Tkinterのバインド bind_all:グローバル範囲のバインド、デフォルトはグローバルショートカットキーです.例えば、F 1はヘルプドキュメント です. bind_class:3つのパラメータを受け入れます.1つ目はクラス名、2つ目はイベント、3つ目は操作です. w.bind_class(“Entry”, “”, my_paste)
bind:インスタンスを個別にバインド unbind:バインドを解除するには、どのイベント をバインドするかを解くパラメータが必要です.
Entry入力ボックス、機能単一 entry[「show」=「*」、オクルージョン文字 を設定
メニュー
1.一般メニュー最初のMenuクラス定義はparent です. add_commandはメニュー項目を追加し、メニューが最上位メニューの場合は左から右に追加します.そうしないとドロップダウンメニューになります. label:メニュー項目名 を指定 command:クリックすると対応する関数 が呼び出されます. acceletor:ショートカット underline:メニュー情報の下に横線があるか否かを定める menu:属性は、トップメニューとしてどのメニューを使用するかを決定する
カスケードメニュー add_cascade:カスケードメニューで、後ろのメニュー を引き出す役割を果たす add_cascadeのmenuプロパティ:メニューをどのメニューにカスケードするかを示す label:名前 プロセス: menuインスタンス を確立する add_command add_cascade
ポップアップメニューポップアップメニューはコンテキストメニュー とも呼ばれる.実現の大まかな考え方 メニューを作成し、メニューに各種機能を追加する マウス右ボタン を監視右クリックすると位置判断により がポップアップする. Menuを呼び出すpopメソッド add_separator:セパレータ を追加
canvasキャンバスキャンバス:図形を自由に描くことができる小さなステージ キャンバスにオブジェクトを描画します.通常はcreate_を使用します.xxxx,xxxxx=オブジェクトタイプ、例えばline,rectangle キャンバスの役割は、一定のコンポーネントをキャンバスに表示する である.キャンバスでサポートされているコンポーネント: arc円または円弧 bitmapビットマップ イメージ画像 line oval楕円形 polygon多角形 rectangle四角形 text window(コンポーネント) createを呼び出すたびにxxxは、作成したコンポーネントのIDを返し、タグ をtag属性で指定することもできる.はcanvasを呼び出す.moveは、使い捨て動作 を実現する五角星 を描きます
# tkinter
import tkinter
tkinter._test()
# hello world
import tkinter
base = tkinter.Tk()
#
base.mainloop()
Tkinter共通コンポーネント
Button
RadioButton
CheckButton
Listbox
Entry
Text
Label ,
Message ,
Menu
MenuButton , Menu
scale
Scrollbar
Canvas
Frame ,
Toplevel
# Label
import tkinter
base = tkinter.Tk()
#
base.wm_title("Label Test")
lb = tkinter.Label(base, text="Python Label")
#
lb.pack()
base.mainloop()
# Label
import tkinter
base = tkinter.Tk()
base.wm_title("Label Test")
# background, font, underline
# ,
lb1= tkinter.Label(base, text="Python AI")
lb1.pack()
lb2= tkinter.Label(base, text=" ", background="green")
lb2.pack()
lb3= tkinter.Label(base, text=" ", background="blue")
lb3.pack()
base.mainloop()
Buttonのプロパティ:
anchor ,
background(bg)
foreground(fg) ( )
borderwidth(bd)
cursor
command
bitmap
font
width ( )
height ( )
state
text
image
# Button
import tkinter
def showLabel():
global baseFrame
# label
# label baseFrame
lb = tkinter.Label(baseFrame, text=" Label")
lb.pack()
baseFrame = tkinter.Tk()
#
# command , ,
btn = tkinter.Button(baseFrame, text="Show Label", command=showLabel)
#btn = tkinter.Button(baseFrame, text="Show Label")
btn.pack()
baseFrame.mainloop()
コンポーネントレイアウト
# pack
import tkinter
baseFrame = tkinter.Tk()
# ,
btn1 = tkinter.Button(baseFrame, text='A')
btn1.pack(side=tkinter.LEFT, expand=tkinter.YES, fill=tkinter.Y)
btn2 = tkinter.Button(baseFrame, text='B')
btn2.pack(side=tkinter.TOP, expand=tkinter.YES, fill=tkinter.BOTH)
btn2 = tkinter.Button(baseFrame, text='C')
btn2.pack(side=tkinter.RIGHT, expand=tkinter.YES, fill=tkinter.NONE,
anchor=tkinter.NE)
btn2 = tkinter.Button(baseFrame, text='D')
btn2.pack(side=tkinter.LEFT, expand=tkinter.NO, fill=tkinter.Y)
btn2 = tkinter.Button(baseFrame, text='E')
btn2.pack(side=tkinter.TOP, expand=tkinter.NO, fill=tkinter.BOTH)
btn2 = tkinter.Button(baseFrame, text='F')
btn2.pack(side=tkinter.BOTTOM, expand=tkinter.YES)
btn2 = tkinter.Button(baseFrame, text='G')
btn2.pack(anchor=tkinter.SE)
baseFrame.mainloop()
# grid
import tkinter
baseFrame = tkinter.Tk()
#
#lb1 = tkinter.Label(baseFrame, text=" : ").grid(row=0, sticky= tkinter.W)
lb1 = tkinter.Label(baseFrame, text=" : ")
lb1.grid(row=0, sticky= tkinter.W)
en = tkinter.Entry(baseFrame)
en.grid(row=0, column=1, sticky=tkinter.E)
lb2 = tkinter.Label(baseFrame, text=" : ").grid(row=1, sticky= tkinter.W)
tkinter.Entry(baseFrame).grid(row=1, column=1, sticky=tkinter.E)
btn = tkinter.Button(baseFrame, text=" ").grid(row=2, column=1, sticky=tkinter.W)
baseFrame.mainloop()
メッセージメカニズム
#
import tkinter
def baseLabel(event):
global baseFrame
print(" , ")
lb = tkinter.Label(baseFrame, text=" ")
lb.pack()
#
baseFrame = tkinter.Tk()
lb = tkinter.Label(baseFrame, text=" ")
# label
# , baseLabel
lb.bind("", baseLabel)
lb.pack()
#
# ,
baseFrame.mainloop()
Tkinterのバインド
Entry
#
import tkinter
#
def reg():
# ,
name = e1.get()
pwd = e2.get()
t1 = len(name)
t2 = len(pwd)
if name == "111" and pwd == "222":
#
lb3["text"] = " "
else:
lb3['text'] = " "
#
# delete ,
e1.delete(0,t1)
e2.delete(0,t2)
#
baseFrame = tkinter.Tk()
lb1 = tkinter.Label(baseFrame, text=" ")
lb1.grid(row=0, column=0, stick=tkinter.W )
e1 = tkinter.Entry(baseFrame)
e1.grid(row=0, column=1, stick=tkinter.E)
lb2 = tkinter.Label(baseFrame, text=" : ")
lb2.grid(row=1, column=0, stick=tkinter.W )
e2 = tkinter.Entry(baseFrame)
e2.grid(row=1, column=1, stick=tkinter.E)
e2['show'] = '*'
# Button command ,
btn = tkinter.Button(baseFrame, text=" ", command=reg)
btn.grid(row=2, column=1, stick=tkinter.E)
lb3 = tkinter.Label(baseFrame, text="")
lb3.grid(row = 3)
# Frame
baseFrame.mainloop()
メニュー
1.一般メニュー
#
import tkinter
baseFrame = tkinter.Tk()
menubar = tkinter.Menu(baseFrame)
for item in ['File', 'Edit', 'View', 'About']:
menubar.add_command(label=item)
baseFrame['menu'] = menubar
baseFrame.mainloop()
カスケードメニュー
import tkinter
baseFrame = tkinter.Tk()
menubar = tkinter.Menu(baseFrame)
emenu = tkinter.Menu(menubar)
for item in ['Copy', 'Past', 'Cut']:
emenu.add_command(label=item)
menubar.add_cascade(label='File')
menubar.add_cascade(label='Edit', menu=emenu)
menubar.add_cascade(label='About')
baseFrame['menu'] = menubar
baseFrame.mainloop()
ポップアップメニュー
import tkinter
def makeLabel():
global baseFrame
tkinter.Label(baseFrame, text="PHP , Python").pack()
baseFrame = tkinter.Tk()
menubar = tkinter.Menu(baseFrame)
for x in [' ', ' ', ' ']:
menubar.add_separator()
menubar.add_command(label=x)
menubar.add_command(label=' ', command=makeLabel)
# ,
def pop(event):
# event.x event.x_root
#menubar.post(event.x_root, event.y_root)
menubar.post(event.x_root, event.y_root)
baseFrame.bind("", pop)
baseFrame.mainloop()
canvasキャンバス
#
import tkinter
baseFrame = tkinter.Tk()
cvs = tkinter.Canvas(baseFrame, width=300, height=200)
cvs.pack()
#
# px
cvs.create_line(23,23, 190,234)
cvs.create_text(56,67, text="I LOVE PYTHON")
baseFrame.mainloop()
#
import tkinter
import math as m
baseFrame = tkinter.Tk()
w = tkinter.Canvas(baseFrame, width=300, height=300, background="gray" )
w.pack()
center_x = 150
center_y = 150
r = 150
#
points = [
#
# pi ,3.1415926
center_x - int(r * m.sin(2 * m.pi / 5)),
center_y - int(r * m.cos(2 * m.pi / 5)),
#
center_x + int(r * m.sin(2 * m.pi / 5)),
center_y - int(r * m.cos(2 * m.pi / 5)),
#
center_x - int(r * m.sin( m.pi / 5)),
center_y + int(r * m.cos( m.pi / 5)),
#
center_x,
center_y - r,
#
center_x + int(r * m.sin(m.pi / 5)),
center_y + int(r * m.cos(m.pi / 5)),
]
#
w.create_polygon(points, outline="green", fill="yellow")
w.create_text(150,150, text=" ")
baseFrame.mainloop()
import tkinter
baseFrame = tkinter.Tk()
def btnClick(event):
global w
w.move(id_ball, 12,5)
w.move("fall", 0,5)
w = tkinter.Canvas(baseFrame, width=500, height=400)
w.pack()
w.bind("", btnClick)
# id
id_ball = w.create_oval(20,20, 50,50, fill="green")
# tag
w.create_text(123,56, fill="red", text="ILovePython", tag="fall")
# tag addtag_withtag
# addtag_all, addtag_above, addtag_xxx
id_rectangle = w.create_rectangle(56,78,173,110, fill="gray")
w.addtag_withtag("fall", id_rectangle)
baseFrame.mainloop()