colorpicker.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import tkinter as tk
  2. def r():
  3. canvas=tk.Canvas(xframe,width=600,height=100)
  4. canvas["bg"] = "yellow" #"green"
  5. canvas.pack()
  6. # RGB
  7. x=0
  8. y=0
  9. j=0
  10. d = 20
  11. f = 255 #255-fi
  12. e = 5
  13. for r in range(0,d+1):
  14. fi = int(r*255/d)
  15. color = '#%02x%02x%02x' % (f, fi, fi)
  16. print( "farbe", r*10, j, f,fi,fi,color)
  17. r = canvas.create_rectangle(x, y, x+20, y+20, fill=color)
  18. x+=20
  19. def hex_to_rgb(hex):
  20. return tuple(int(hex[i:i+2], 16) for i in (0, 2, 4))
  21. def _cb(event,data={}):
  22. print("dummy cb",event)
  23. class cb():
  24. def __init__(self,win,cb=None):
  25. self.win = win
  26. if cb:
  27. self.cb = cb
  28. else:
  29. self.cb = _cb
  30. def _callback(self,event):
  31. clobj=event.widget
  32. ## undermouse=find_withtag(master.CURRENT)
  33. undermouse=self.win.find_closest(self.win.CURRENT)
  34. print( "colorpicker._callback",repr(undermouse))
  35. def callback(self,event):
  36. cnv = self.win
  37. item = cnv.find_closest(cnv.canvasx(event.x), cnv.canvasy(event.y))[0]
  38. tags = cnv.gettags(item)
  39. #cnv.itemconfigure(self.tag, text=tags[0])
  40. print("colorpicker callback",tags,item)
  41. color = cnv.itemcget(item, "fill")
  42. cnv.itemconfig("all", width=1)#filla="green")
  43. cnv.itemconfig(item, width=3)#filla="green")
  44. print("picker",color)
  45. int_color= hex_to_rgb(color[1:])
  46. print("picker",int_color)
  47. self.cb(event,{"canvas":cnv,"color":int_color})
  48. def colorpicker(xframe,width=600,height=100,xcb=None):
  49. canvas=tk.Canvas(xframe,width=width,height=height)
  50. canvas["bg"] = "grey" #"green"
  51. _callback = cb(canvas,xcb)
  52. #canvas.bind("<Key>", key)
  53. canvas.bind("<Key>", _callback.callback)
  54. canvas.bind("<Button-1>", _callback.callback)
  55. canvas.bind("<Button-2>", _callback.callback)
  56. canvas.bind("<Button-3>", _callback.callback)
  57. canvas.bind("<Button-4>", _callback.callback)
  58. canvas.bind("<Button-5>", _callback.callback)
  59. canvas.bind("<B1-Motion>", _callback.callback)
  60. canvas.bind("<B2-Motion>", _callback.callback)
  61. canvas.bind("<B3-Motion>", _callback.callback)
  62. canvas.bind("<B4-Motion>", _callback.callback)
  63. canvas.bind("<B5-Motion>", _callback.callback)
  64. canvas.pack()
  65. x=2
  66. y=2
  67. d = 3
  68. r=0
  69. g=1
  70. b=1
  71. mode = 0
  72. count = 0
  73. grey = 0
  74. while 1:
  75. #print("-",[r,g,b],mode)
  76. for xx in range(d,0,-1):
  77. fi = int(xx*255/d)
  78. #print(xx,y)
  79. #print(fi,end=" ")
  80. color = '#%02x%02x%02x' % (int(255-r*fi),int(255-g*fi),int(255-b*fi))
  81. canvas.create_rectangle(x, y, x+20, y+20, fill=color)
  82. y+=22
  83. color = '#%02x%02x%02x' % (255,255,255)
  84. canvas.create_rectangle(x, y, x+20, y+20, fill=color)
  85. y+=22
  86. if grey <= 255:
  87. color = '#%02x%02x%02x' % (grey,grey,grey)
  88. canvas.create_rectangle(x, y, x+20, y+20, fill=color)
  89. grey +=255//25
  90. #print()
  91. if count == 1 and mode == 3:
  92. #print("-------")
  93. break
  94. y=2
  95. x+=22
  96. if r >= 1 and g >= 1 and b <= 0:
  97. mode = 1
  98. elif r <= 0 and g >= 1 and b <= 0:
  99. mode = 2
  100. elif r <= 0 and g >= 1 and b >= 1:
  101. mode = 3
  102. elif r <= 0 and g <= 0 and b >= 1:
  103. mode = 4
  104. elif r >= 1 and g <= 0 and b >= 1:
  105. mode = 5
  106. elif r >= 1 and g <= 0 and b <= 0:
  107. mode = 6
  108. count +=1
  109. s = 0.25 # 1/d #0.25
  110. if mode == 1:
  111. r -= s#0.25
  112. if mode == 2:
  113. b += s#0.25
  114. if mode == 3:
  115. g -= s#0.25
  116. if mode == 4:
  117. r += s#0.25
  118. if mode == 5:
  119. b -= s#0.25
  120. if mode == 6:
  121. g += s#0.25
  122. if r > 1:
  123. r=1
  124. if g > 1:
  125. g=1
  126. if b > 1:
  127. b=1
  128. if r < 0:
  129. r=0
  130. if g < 0:
  131. g=0
  132. if b < 0:
  133. b=0
  134. if __name__ == "__main__":
  135. xframe = tk.Tk()
  136. xframe.geometry("1600x600")
  137. r()
  138. colorpicker(xframe)
  139. xframe.mainloop()