eightban's memo

残しておきたい記事をまとめてみました。このブログに書いてあるドキュメントやブログで配布しているファイルの使用によって発生するいかなる損害に対してもこのブログの管理者は責任を負いません。使用する場合は自己責任のもとに使用してください。

Python

16進数のカラーコードを RGBコードに一括で変更するアプリ

更新日:

Python のコード

import tkinter as tk
from tkinter import ttk
from tkinter import colorchooser

def color_changed():
    # カラーピッカーから選択された色を取得
#    selected_color = colorchooser.askcolor()[1]
    selected_color = colorchooser.askcolor(color=color_entry.get(), title="Select a color")[1]

    # ラベルに選択された色を設定
    color_label.config(style="ColorLabel.TLabel", background=selected_color)
    # RGB値をスライダーに反映
    r_scale.set(int(selected_color[1:3], 16))
    g_scale.set(int(selected_color[3:5], 16))
    b_scale.set(int(selected_color[5:7], 16))
    # カラーコードをエントリーボックスに反映
    color_entry.delete(0, tk.END)
    color_entry.insert(0, selected_color)

def update_color(event=None):
    # スライダーからRGB値を取得し、整数に変換
    r = int(r_scale.get())
    g = int(g_scale.get())
    b = int(b_scale.get())
    # カラーコードを作成
    color_code = "#{:02X}{:02X}{:02X}".format(r, g, b)
    # ラベルに選択された色を設定
    color_label.config(style="ColorLabel.TLabel", background=color_code)
    # カラーコードをエントリーボックスに反映
    color_entry.delete(0, tk.END)
    color_entry.insert(0, color_code)
    # RGB値をエントリーボックスに反映
    r_entry.configure(state='normal')
    g_entry.configure(state='normal')
    b_entry.configure(state='normal')

    r_entry.delete(0, tk.END)
    r_entry.insert(0, str(r))
    g_entry.delete(0, tk.END)
    g_entry.insert(0, str(g))
    b_entry.delete(0, tk.END)
    b_entry.insert(0, str(b))
    r_entry.configure(state='readonly')
    g_entry.configure(state='readonly')
    b_entry.configure(state='readonly')

def convert_color():
    # スクロール可能なテキストボックスから入力されたカラーコードを取得
    hex_colors = text_box1.get("1.0", "end").splitlines()
    # 各カラーコードについて変換を行い、結果を右側のテキストボックスに表示
    result = []
    for hex_color in hex_colors:
        # 入力がカラーコードの形式に従っていることを確認
        if len(hex_color) == 7 and hex_color[0] == '#':
            try:
                # 16進数をRGBに変換してカラーコードを生成
                rgb_color = tuple(int(hex_color[i:i+2], 16) for i in (1, 3, 5))
                rgb_code =  ",".join(map(str, rgb_color))  
                result.append(rgb_code)
            except ValueError:
                result.append("Invalid Color Code")
        else:
            result.append("Invalid Color Code")
    # 右側のテキストボックスに変換結果を表示
    text_box2.delete("1.0", "end")
    text_box2.insert("1.0", "\n".join(result))
    # 背景色を変更
    change_background_color()

def change_background_color():
    # スクロール可能なテキストボックスから入力されたカラーコードを取得
    hex_colors = text_box1.get("1.0", "end").splitlines()
    for i, hex_color in enumerate(hex_colors):
        # 入力がカラーコードの形式に従っていることを確認
        if len(hex_color) == 7 and hex_color[0] == '#':
            try:
                # 16進数をRGBに変換してカラーコードを生成
                rgb_color = tuple(int(hex_color[i:i+2], 16) for i in (1, 3, 5))
                rgb_code =  ",".join(map(str, rgb_color))
                # 背景色を変更
                text_box1.tag_config(f"line{i}", background=hex_color)
                text_box1.tag_add(f"line{i}", f"{i+1}.0", f"{i+1}.end")
            except ValueError:
                pass

def convert_color2():
    # スクロール可能なテキストボックスから入力されたカラーコードを取得
    rgb_colors = text_box2.get("1.0", "end").splitlines()
    # 各カラーコードについて変換を行い、結果を右側のテキストボックスに表示
    result = []
    for rgb_color in rgb_colors:
        # 入力がカラーコードの形式に従っていることを確認

        str_list = rgb_color.split(",") 
        str_list = list(map(int, str_list))

        if len(str_list) == 3:
            try:
                # 16進数をRGBに変換してカラーコードを生成
                hex_code = "#{:02x}{:02x}{:02x}".format(*str_list)
                result.append(hex_code)
            except ValueError:
                result.append("Invalid Color Code")
        else:
            result.append("Invalid Color Code")
    # 右側のテキストボックスに変換結果を表示
    text_box1.delete("1.0", "end")
    text_box1.insert("1.0", "\n".join(result))
    # 背景色を変更
    change_background_color()
# Tkinterウィンドウを作成
root = tk.Tk()
root.title("Color Picker and Converter")

# スタイルを作成してラベルに適用
style = ttk.Style(root)
style.configure("ColorLabel.TLabel", background="white")

paned_window = tk.PanedWindow(root)
paned_window.grid()

paned_window2 = tk.PanedWindow(root)
paned_window2.grid()

# 上部のFrame
upper_frame = ttk.LabelFrame(root, text="Color Picker")
upper_frame.grid(row=0, column=0, padx=5, pady=5, sticky="nsew")

# 下部のFrame
lower_frame = ttk.LabelFrame(root, text="Color Converter")
lower_frame.grid(row=1, column=0, padx=5, pady=5, sticky="nsew")
paned_window.add(upper_frame)
paned_window2.add(lower_frame)

# カラーピッカーボタンを作成
color_picker_button = ttk.Button(upper_frame, text="Pick a Color", command=color_changed)
color_picker_button.grid(row=0, column=0, padx=5, pady=5)

# カラーピッカーラベルを作成
color_label = ttk.Label(upper_frame, text="Selected Color", style="ColorLabel.TLabel", width=20, relief="solid")
color_label.grid(row=0, column=1, padx=5, pady=5)

# フレームを作成
upper_frame2 = ttk.Frame(upper_frame)
upper_frame2.grid(row=1, column=0, columnspan=2, padx=5, pady=5)

# RGB値のスライダーを作成
r_scale = ttk.Scale(upper_frame2, from_=0, to=255, length=200, command=update_color)
r_scale.grid(row=0, column=0, padx=5, pady=5)
g_scale = ttk.Scale(upper_frame2, from_=0, to=255, length=200, command=update_color)
g_scale.grid(row=1, column=0, padx=5, pady=5)
b_scale = ttk.Scale(upper_frame2, from_=0, to=255, length=200, command=update_color)
b_scale.grid(row=2, column=0, padx=5, pady=5)

# RGB値の表示エントリーボックスを作成
r_entry = ttk.Entry(upper_frame2, width=5, textvariable=tk.StringVar())
r_entry.grid(row=0, column=1, padx=5, pady=5)
g_entry = ttk.Entry(upper_frame2, width=5, textvariable=tk.StringVar())
g_entry.grid(row=1, column=1, padx=5, pady=5)
b_entry = ttk.Entry(upper_frame2, width=5, textvariable=tk.StringVar())
b_entry.grid(row=2, column=1, padx=5, pady=5)


# カラーコードのエントリーボックスを作成
color_entry = ttk.Entry(upper_frame, textvariable=tk.StringVar())
color_entry.grid(row=2, column=0, columnspan=2, padx=5, pady=5)

# カラーコード変換ボタンを作成
convert_button = ttk.Button(lower_frame, text="Convert->", command=convert_color)
convert_button.grid(row=0, column=0, columnspan=2, padx=5, pady=5)

convert_button2 = ttk.Button(lower_frame, text="<-Convert", command=convert_color2)
convert_button2.grid(row=0, column=3, columnspan=2, padx=5, pady=5)

# スクロール可能なテキストボックスを作成(上側)
color_label1 = ttk.Label(lower_frame, text="Hex Color", style="ColorLabel.TLabel", width=20, relief="solid")
color_label1.grid(row=1, column=0, padx=5, pady=5)

text_box1 = tk.Text(lower_frame, wrap="word", height=20, width=15)
text_box1.grid(row=2, column=0, padx=5, pady=5, columnspan=2, sticky="nsew")
scrollbar1 = ttk.Scrollbar(lower_frame, command=text_box1.yview)
scrollbar1.grid(row=2, column=2, sticky="ns")
text_box1.config(yscrollcommand=scrollbar1.set)

# スクロール可能なテキストボックスを作成(下側)
color_label2 = ttk.Label(lower_frame, text="RGB Color", style="ColorLabel.TLabel", width=20, relief="solid")
color_label2.grid(row=1, column=3, padx=5, pady=5)
text_box2 = tk.Text(lower_frame, wrap="word", height=20, width=15)
text_box2.grid(row=2, column=3, padx=5, pady=5, columnspan=2, sticky="nsew")
scrollbar2 = ttk.Scrollbar(lower_frame, command=text_box2.yview)
scrollbar2.grid(row=2, column=5, sticky="ns")
text_box2.config(yscrollcommand=scrollbar2.set)

r_entry.configure(state='readonly')
g_entry.configure(state='readonly')
b_entry.configure(state='readonly')

update_color(event=None)

# GUIを表示
root.mainloop()

-Python

Copyright© eightban's memo , 2024 All Rights Reserved Powered by STINGER.