【Python/tkinter】ツールバーの作成

tkinterにはToolBarのような、ツールバー用のウィジェットは無いのですが、ツールバーをFrameButtonを使って作ります。

フレームにアイコン付きのボタンを左側に配置するだけですが。。

(作成したツールバーのイメージ)

  • ファイルを開く
  • フォルダを開く
  • 保存

の3つのボタンを配置しています。

 

(ソースコード)

import tkinter as tk
from tkinter import filedialog
from PIL import ImageTk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.master.title("ToolBar")    # ウィンドウタイトル
        self.master.geometry("300x200") # ウィンドウサイズ(幅x高さ)

        #---------------------------------------
        #  ツールバー
        #---------------------------------------     
        
        # ツールバー用Frame
        frame_toolbar = tk.Frame(self.master, bg = "gray90")
        
        #-------------------------
        # ボタン
        # ファイルを開く
        self.ico_open_file = ImageTk.PhotoImage(file = "OpenFile_16x.png")
        btn_open_file = tk.Button(frame_toolbar, command = self.open_file_click, image = self.ico_open_file)
        # フォルダを開く
        self.ico_open_folder = ImageTk.PhotoImage(file = "OpenFolder_16x.png")
        btn_open_folder = tk.Button(frame_toolbar, command = self.open_folder_click, image = self.ico_open_folder)
        # 保存
        self.ico_save = ImageTk.PhotoImage(file = "Save_16x.png")
        btn_save = tk.Button(frame_toolbar, command = self.save_click, image = self.ico_save)

        #-------------------------
        # ボタンをフレームに配置
        btn_open_file.pack(side = tk.LEFT, padx = (5, 0)) # 左側だけ隙間を空ける
        btn_open_folder.pack(side = tk.LEFT)
        btn_save.pack(side = tk.LEFT)

        #-------------------------
        # ツールバーをウィンドウに配置
        frame_toolbar.pack(fill=tk.X)
        #---------------------------------------     

    def open_file_click(self):
        '''[ファイルを開く]がクリックされたとき'''
        filename = filedialog.askopenfilename()
        print(filename)

    def open_folder_click(self):
        '''[フォルダを開く]がクリックされたとき'''
        dir_name = filedialog.askdirectory()
        print(dir_name)

    def save_click(self):
        '''[保存]がクリックされたとき'''
        filename = filedialog.asksaveasfilename()
        print(filename)

if __name__ == "__main__":
    root = tk.Tk()
    app = Application(master = root)
    app.mainloop()

アイコンファイルはマイクロソフトのVisual Studio Image Libraryより入手しました。

https://www.microsoft.com/en-us/download/details.aspx?id=35825

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください