5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】tkinter 再利用しそうなコード

Last updated at Posted at 2019-12-15

インポート

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)
5
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?