123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import tkinter as tk
- def r():
- canvas=tk.Canvas(xframe,width=600,height=100)
- canvas["bg"] = "yellow" #"green"
- canvas.pack()
- # RGB
- x=0
- y=0
- j=0
- d = 20
- f = 255 #255-fi
- e = 5
- for r in range(0,d+1):
- fi = int(r*255/d)
- color = '#%02x%02x%02x' % (f, fi, fi)
- print( "farbe", r*10, j, f,fi,fi,color)
- r = canvas.create_rectangle(x, y, x+20, y+20, fill=color)
- x+=20
- def hex_to_rgb(hex):
- return tuple(int(hex[i:i+2], 16) for i in (0, 2, 4))
- def _cb(event,data={}):
- print("dummy cb",event)
- class cb():
- def __init__(self,win,cb=None,scale=None):
- self.scale=scale
- self.win = win
- self.int_color = [255,255,255]
- if cb:
- self.cb = cb
- else:
- self.cb = _cb
- def _callback(self,event):
- clobj=event.widget
- ## undermouse=find_withtag(master.CURRENT)
- undermouse=self.win.find_closest(self.win.CURRENT)
- print( "colorpicker._callback",repr(undermouse))
- def callback(self,event):
- cnv = self.win
- try:
- item = cnv.find_closest(cnv.canvasx(event.x), cnv.canvasy(event.y))[0]
- tags = cnv.gettags(item)
- #cnv.itemconfigure(self.tag, text=tags[0])
- print("colorpicker callback",tags,item)
- color = cnv.itemcget(item, "fill")
- cnv.itemconfig("all", width=1)#filla="green")
- cnv.itemconfig(item, width=3)#filla="green")
- print("picker",color)
- self.int_color= hex_to_rgb(color[1:])
- except AttributeError as e:
- print("except colorpicker ",e)
- print("take old last",self.int_color)
- print("picker",self.int_color)
- int_color2 = []
- for c in self.int_color:
- if self.scale is not None:
- x = int(c *self.scale.get()/99)
- print(c,x)
- int_color2.append(x)
- else:
- int_color2.append(c)
- self.cb(event,{"canvas":cnv,"color":int_color2})
- def colorpicker(xframe,width=500,height=100,xcb=None):
- canvas=tk.Canvas(xframe,width=width,height=height)
- canvas["bg"] = "grey" #"green"
- _scale = tk.Scale(xframe,repeatdelay=1000,resolution=5,showvalue=0,bg="black", width=10,length=110,from_=99,to=0)##,command=self.event)
- _scale.set(255)
- _callback = cb(canvas,xcb,_scale)
- #canvas.bind("<Key>", key)
- canvas.bind("<Key>", _callback.callback)
- canvas.bind("<Button-1>", _callback.callback)
- canvas.bind("<Button-2>", _callback.callback)
- canvas.bind("<Button-3>", _callback.callback)
- canvas.bind("<Button-4>", _callback.callback)
- canvas.bind("<Button-5>", _callback.callback)
- canvas.bind("<B1-Motion>", _callback.callback)
- canvas.bind("<B2-Motion>", _callback.callback)
- canvas.bind("<B3-Motion>", _callback.callback)
- canvas.bind("<B4-Motion>", _callback.callback)
- canvas.bind("<B5-Motion>", _callback.callback)
- canvas.pack(side="left")
- def scale_callback(data=[]):
- #_last_scale = time.time()
- print("scale_callback",data)
- _callback.callback(None) #data)
- #_scale.config(command=_callback.callback)
- _scale.config(command=scale_callback)
- _scale.pack(side="left")
- x=2
- y=2
- d = 3
- r=0
- g=1
- b=1
- mode = 0
- count = 0
- grey = 0
- while 1:
- #print("-",[r,g,b],mode)
- for xx in range(d,0,-1):
- fi = int(xx*255/d)
- #print(xx,y)
- #print(fi,end=" ")
- color = '#%02x%02x%02x' % (int(255-r*fi),int(255-g*fi),int(255-b*fi))
- canvas.create_rectangle(x, y, x+20, y+20, fill=color)
-
- y+=22
- color = '#%02x%02x%02x' % (255,255,255)
- canvas.create_rectangle(x, y, x+20, y+20, fill=color)
-
- y+=22
- if grey <= 255:
- color = '#%02x%02x%02x' % (grey,grey,grey)
- canvas.create_rectangle(x, y, x+20, y+20, fill=color)
- grey +=255//25
- #print()
- if count == 1 and mode == 3:
- #print("-------")
- break
- y=2
- x+=22
- if r >= 1 and g >= 1 and b <= 0:
- mode = 1
- elif r <= 0 and g >= 1 and b <= 0:
- mode = 2
- elif r <= 0 and g >= 1 and b >= 1:
- mode = 3
- elif r <= 0 and g <= 0 and b >= 1:
- mode = 4
- elif r >= 1 and g <= 0 and b >= 1:
- mode = 5
- elif r >= 1 and g <= 0 and b <= 0:
- mode = 6
- count +=1
- s = 0.25 # 1/d #0.25
- if mode == 1:
- r -= s#0.25
- if mode == 2:
- b += s#0.25
- if mode == 3:
- g -= s#0.25
- if mode == 4:
- r += s#0.25
- if mode == 5:
- b -= s#0.25
- if mode == 6:
- g += s#0.25
- if r > 1:
- r=1
- if g > 1:
- g=1
- if b > 1:
- b=1
- if r < 0:
- r=0
- if g < 0:
- g=0
- if b < 0:
- b=0
- #print(dir(_b))
- #input()
- #b.configure(width = 10, activebackground = "#33B5E5", relief = FLAT)
- #b = canvas.create_window(10, 10, anchor="nw", window=f)
- #self.b.pack(fill=tk.Y, side=tk.TOP)
- #self.elem.append(self.b)
-
- if __name__ == "__main__":
- xframe = tk.Tk()
- xframe.geometry("1600x600")
- r()
- colorpicker(xframe)
- xframe.mainloop()
|