インポート
import tkinter as tk
レイアウト
メインウィンドウ
# メインウィンドウ生成
tk1 = tk.Tk()
# ウィンドウサイズを指定
tk1.geometry("900x600")
# ウィンドウタイトルを指定
tk1.title("TextConv 2020")
# ウィンドウサイズの変更可否設定
tk1.resizable(0,0)
# ウィンドウの背景色
tk1.configure(bg="white")
tk1.mainloop()
tk1.withdraw() # ウィンドウの表示を抑制はつけない
メニューバー
from tkinter import filedialog
def m_load():
typ = [('テキストファイル','*.txt')]
dir = 'C:\\'
file = filedialog.askopenfilename(filetypes = typ, initialdir = dir)
f = open(file)
fdata = f.read() # ファイル終端まで全て読んだデータを返す
textField.delete('1.0', 'end')
textField.insert('1.0', fdata)
f.close()
def m_save():
file = filedialog.asksaveasfilename()
txt = textField.get('1.0', 'end -1c')
f=open(file, mode='w')
f.write(txt)
f.close()
# メニューバー作成
men = tk.Menu(tk1)
# メニューバーを画面にセット
tk1.config(menu=men)
# メニューに親メニュー(ファイル)を作成する
menu_file = tk.Menu(tk1)
men.add_cascade(label='File', menu=menu_file)
men.add_cascade(label='File Load', command=m_load)
men.add_cascade(label='File Save', command=m_save)
パネルウィンドウ
# orient : 配置(vertical or horizontal)
# bg : 枠線の色
# pack
# expand :可変(True or False(固定)
# fill : スペースが空いている場合の動き(tk.BOTH 縦横に広がる)
# side : 配置する際にどの方向からつめていくか(side or top ・・・)
pw_main = tk.PanedWindow(tk1, orient='horizontal')
pw_main.pack(expand=True, fill = tk.BOTH, side="left")
pw_left = tk.PanedWindow(pw_main, bg="cyan", orient='vertical')
pw_main.add(pw_left)
pw_right = tk.PanedWindow(pw_main, bg="white", orient='vertical')
pw_main.add(pw_right)
フレーム
mainFrame = tk.Frame(pw_left, width=450, height=600, bg="white")
# propagation を False にすると,フレームの大きさは width, height
# Trueの場合は、中のウィジェットにくっつく
mainFrame.propagate(False)
mainFrame.pack()
タブ
import tkinter.ttk as ttk
note = ttk.Notebook(tk1)
tab = tk.Frame(note,height=100,width=100)
note.add(tab, text="Tab")
note.pack()
操作
クリップボード
def c_button1_click():
# クリップボードから読み込み
MOji1 = tk1.clipboard_get()
# txt1.insert(0,"test")
# insert()メソッドは、第一引数に位置を、第二引数に挿入する文字を指定します。
textField.delete('1.0', 'end')
textField.insert('1.0', MOji1)
# textField.insert('1.0', 'あいうえお\nアイウアイウ\nabcABCabcABC\n123123')
def c_button2_click():
# クリップボードから読み込み
textField.clipboard_append
# ボタン(クリップボードから貼付)
c_button1 = tk.Button(clipboardFrame, text='クリップボードから貼付',command=c_button1_click,bg="yellow")
c_button1.place(x=10, y=5)
# ボタン(クリップボードにコピー)
c_button2 = tk.Button(clipboardFrame, text="クリップボードにコピー", command=c_button2_click,bg="gold")
c_button2.place(x=150, y=5)
テキストエリア
# スクロールバー
scrollbar = tk.Scrollbar(textFrame)
scrollbar.pack(side=tk.RIGHT, fill="y")
# テキストボックス
textField = tk.Text(textFrame, width=500, height=500, bd=5, relief="groove")
textField.propagate(False)
textField.pack(side=tk.LEFT, padx=(0, 0), pady=(0, 0))
textField["yscrollcommand"] = scrollbar.set
textField.insert('1.0', 'あいうえお\nアイウアイウ\nabcABCabcABC\n123123')
padx:外側の横の隙間 =10 両側 =(10,10) 左,右
pady:外側の縦の隙間
絶対座標ではなく、前・左のものとの相関位置を示すので
(,)を使用する時は(n,0)と後を0にした方が設定しやすい
デフォルトは Tk.CENTER.
他に、Tk.W (左よせ)、Tk.E (右よせ)、Tk.N (上よせ)、Tk.S (下よせ)、
Tk.NW (左上)、Tk.SW (左下)、Tk.NE (右上)、Tk.SE (右下)
・テキストボックスに文字をセット
textField.insert(tk.END,"2020")
第一パラメータは文字をセットする位置
「tk.END」にするとテキストボックスの最後に追加する
・Entryから文字列を取得
textField.get
・テキストボックスの文字列をクリア
textField.delete(0,tk.END)
・数値 1.0 または文字列"1.0"
テキストウィジェットの最初の文字の位置は 1.0
・"end" or tk.END
Textボックスの最後
コントロール
チェックボタン
chk1 = tk.Checkbutton(SideFrame1, text='行',bg="lightgreen")
chk1.place(x=180, y=7)
ボタン
S_button1 = tk.Button(SideFrame2, text="入替", command= lambda:c_button_click(10),bg="salmon")
jpg表示
# tkinterはjpg表示対応していないため
from PIL import Image, ImageTk
img = Image.open('img.jpg')
w = img.width # 横幅を取得
h = img.height # 縦幅を取得
# 画に合わせて横を縮小
img = img.resize(( int(w * (600/h)), int(h * (600/h)) ))
img = ImageTk.PhotoImage(img)
canvas = tk.Canvas(bg="pink", width=400, height=600)
canvas.place(x=0, y=0)
canvas.create_image(0, 0, image=img, anchor=tk.NW)
TkinterDnD2 インストール
conda install -c gagphil1 tkinterdnd2
おまけ
グローバル変数をモジュール間で共有する
cfg.pyを作成
x = 0
片方のモジュール、インポートして、x=設定
import cfg
cfg.x = 1
もう片方で読み込む
import cfg
import mod
print(cfg.x)