我只想添加背景颜色作为渐变颜色!这可能看起来我的Tkinter-GUI比普通的颜色代码更具吸引力。有没有办法在python中实现这一点,任何人都可以帮助我
它可以包含这样的东西吗?
bg="40%,#207cca 40%,#2989d8 50%"
def createwidgets(self):
master_f = Tkinter.Frame (objMG.root, relief='sunken', bd=2,height =10,bg='#54596d')
master_f.pack (side='top', fill='both', expand=1)
self.Up_frame = Tkinter.Frame(master_f,relief='sunken',height=50,bg="#C0C0C0")
self.Up_frame.pack(side='top',fill='x',expand='no')
#self.Up_frame = Tkinter.Frame(master_f,relief='sunken',height=50,bg="40%,#207cca 40%,#2989d8 50%")
#self.Up_frame.pack(side='top',fill='x',expand='no')
答案 0 :(得分:7)
您无法为任意小部件提供渐变背景,但您可以在画布上绘制渐变并使用画布而不是框架作为容器。
这个例子有点计算密集,但它显示了绘制渐变背景的一般想法。优化留给读者练习。
import Tkinter as tk # py2
# import tkinter as tk # py3
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
f1 = GradientFrame(self, borderwidth=1, relief="sunken")
f2 = GradientFrame(self, "green", "blue", borderwidth=1, relief="sunken")
f1.pack(side="top", fill="both", expand=True)
f2.pack(side="bottom", fill="both", expand=True)
class GradientFrame(tk.Canvas):
'''A gradient frame which uses a canvas to draw the background'''
def __init__(self, parent, color1="red", color2="black", **kwargs):
tk.Canvas.__init__(self, parent, **kwargs)
self._color1 = color1
self._color2 = color2
self.bind("<Configure>", self._draw_gradient)
def _draw_gradient(self, event=None):
'''Draw the gradient'''
self.delete("gradient")
width = self.winfo_width()
height = self.winfo_height()
limit = width
(r1,g1,b1) = self.winfo_rgb(self._color1)
(r2,g2,b2) = self.winfo_rgb(self._color2)
r_ratio = float(r2-r1) / limit
g_ratio = float(g2-g1) / limit
b_ratio = float(b2-b1) / limit
for i in range(limit):
nr = int(r1 + (r_ratio * i))
ng = int(g1 + (g_ratio * i))
nb = int(b1 + (b_ratio * i))
color = "#%4.4x%4.4x%4.4x" % (nr,ng,nb)
self.create_line(i,0,i,height, tags=("gradient",), fill=color)
self.lower("gradient")
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()