初めて質問します。よろしくお願いします。
macOS10.10.2 の python2.7.6 に標準で入っている Tkinter を使って、スケールバーやボタンに触れると自動的に背景色や文字色を変化させてくれるようなGUIを作ろうとしています。
希望する設定は、
・色を適用させるためのスペース(Labelを使う)を用意する。
・背景色用と文字色用のRGBスケールバーを用意する。このスケールバーを動かすと色が自動的に変化するようにする。
・スケールバーとは独立に「Black」や「Red」などのラベルをつけたボタンをいくつか用意し、それを押すこでも色が適用される。ボタンを押したときに背景色or文字色のどちらに適用されるからは、すぐ近くのラジオボタンを押して選べるようにする。
現在書いているコードをやや簡略化したものを貼ります。
初心者コードなのでクラスとかは使えず、お恥ずかしいですが。
見ていただきたいのはコメントを書いているところ。
Python
1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4import sys 5try: 6 import Tkinter as Tk 7except ImportError: 8 import tkinter as Tk #For Python 3 9 10 11 12def change_bg(_): 13 label_sample.configure(bg="#%02x%02x%02x"\ 14 %(scale_bg[0].get(),scale_bg[1].get(),scale_bg[2].get())) 15 16def change_str(_): 17 label_sample.configure(fg="#%02x%02x%02x"\ 18 %(scale_str[0].get(),scale_str[1].get(),scale_str[2].get())) 19 20def set_color(color): 21 if val_radio.get()=="bg": 22 for i in range(3) : scale_bg[i] .set(palette[color][i]) 23 elif val_radio.get()=="str": 24 for i in range(3) : scale_str[i].set(palette[color][i]) 25 26RGB = ["R","G","B"] 27palette = {"Black" :[ 0, 0, 0] , "Gray" :[127,127,127] , "White" :[255,255,255], 28 "Red" :[255, 0, 0] , "Green" :[ 0,255, 0] , "Blue" :[ 0, 0,255]} 29 30 31 32root = Tk.Tk() 33root.geometry("420x360") 34root.resizable(0,0) 35 36label_sample = Tk.Label(root,text="Sample",relief=Tk.RAISED,bd=2,font=(u"",20)) 37label_sample.place(relx=0.35,rely=0.05,relwidth=0.3,relheight=0.13) 38 39label_rgb = [] 40scale_bg = [] 41scale_str = [] 42for i in range(3): 43 label_rgb.append(Tk.Label(root,text=RGB[i])) 44 scale_bg .append(Tk.Scale(root,label="",orient="h",from_=0,to=255,command=change_bg)) 45 scale_str.append(Tk.Scale(root,label="",orient="h",from_=0,to=255,command=change_str)) 46 label_rgb[i].place(relx=0.45,rely=0.22+0.10*i,relwidth=0.10,relheight=0.15) 47 scale_bg[i] .place(relx=0.08,rely=0.22+0.10*i,relwidth=0.35,relheight=0.15) 48 scale_str[i].place(relx=0.57,rely=0.22+0.10*i,relwidth=0.35,relheight=0.15) 49 50val_radio = Tk.StringVar() 51val_radio.set("bg") 52radio_bg = Tk.Radiobutton(text="Background Color",variable=val_radio,value="bg") 53radio_str = Tk.Radiobutton(text="String Color",variable=val_radio,value="str") 54radio_bg .place(relx=0.13,rely=0.60) 55radio_str.place(relx=0.62,rely=0.60) 56#このラジオボタンがうまく機能していない? 57 58 59order = ["Black","Gray","White","Red","Green","Blue"] 60button = [] 61for i in range(len(order)): 62 button.append(Tk.Button(root,text=order[i],command=set_color(order[i]))) 63 button[i].place(relx=0.07+0.29*(i%3),rely=0.68+0.07*(i/3),relwidth=0.28,relheight=0.08) 64 #ボタンを配置した時点で、orderの最後のBlueが適用されてしまっている。なぜ? 65 #それに、ボタンを押しても色が反映されない。 66 67Tk.Button(root,text="exit",command=sys.exit).place(relx=0.78,rely=0.89,relwidth=0.2) 68 69 70root.mainloop(); 71
問題点は、
①起動させたときの背景色は黒であってほしいのに、青色が適用されてしまっている。
②ラジオボタンを選んでボタンを押しても、背景色・文字色に適用されない。
の2点です。
以上、解決法が分かる方いらっしゃれば、ご回答よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。