Python Redefine the variable given as a parameter to the function

Viewed 50

Hello I am trying to make theme window with tkinter. There is 5 variable for different widgets's color. I will use color dialog for choosing colors but I don't want to define 5 functions. So I think I can make 1 function with 1 parameter of which variable to change color of it. My code is below;

My variables:

generalBgColor = '#454b4d'
generalFgColor = '#f2fdff'
generalBtnColor = '#0a5e7a'
mainLabelColor = '#ffffff'
highlightedLetterColor = '#ff0000'

Buttons that call pickColor function:

bgButton = tk.Button(themeWindow, text=' ', relief='ridge',
                         bg=generalBgColor, width=6, command=lambda: pickColor(generalBgColor))

fgButton = tk.Button(themeWindow, text=' ', relief='ridge',
                         bg=generalFgColor, width=6, command=lambda: pickColor(generalFgColor))

btnButton = tk.Button(themeWindow, text=' ', relief='ridge',
                          bg=generalBtnColor, width=6, command=lambda: pickColor(generalBtnColor))

mainlButton = tk.Button(themeWindow, text=' ', relief='ridge',
                            bg=mainLabelColor, width=6, command=lambda: pickColor(mainLabelColor))

letterButton = tk.Button(themeWindow, text=' ', relief='ridge',
                             bg=highlightedLetterColor, width=6,
                             command=lambda:pickColor(highlightedLetterColor))

And this is the my function:

def pickColor(variable):
        global generalBgColor, generalFgColor, generalBtnColor, mainLabelColor, highlightedLetterColor
        tempColor = askcolor(color=variable, title='Choose A Color')
        variable = tempColor[1]

There is no error but variable doesn't change. I know this won't work this is the reason why I ask here for help.

1 Answers

tkinter natively supports color palette with tk_setPalette. Be aware that the name and value pairs are for tk.widgets only and doesn't support ttk.widgets. In addition one has to define the palette before creating any other widgets and the background option is a positional argument that must be set. According to the docs, the following options are currently supported:

> activeBackground
> foreground
> selectColor
> activeForeground  
> highlightBackground
> selectBackground
> background
> highlightColor    
> selectForeground
> disabledForeground    
> insertBackground  
> troughColor

a minimal exempel is given in the code below:

import tkinter as tk

root = tk.Tk()
root.tk_setPalette(background='#ff00f0',foreground='white')
tk.Label(root, text='test').pack()
root.mainloop()

Alternatively you always can specify a dictionary and like

my_options = {'background':'#000000'}

and unpack these in the constructor like tk.Label(root, **my_options)

Related