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()
ディスカッション
コメント一覧
まだ、コメントがありません