0

Hey all,

Hopefully this will help someone with a problem I encountered. For a few days now I was looking for a way to concisely set the attributes to numerous controls without duplicating attribute code again and again. For example, let's say I have 3 static text controls and I would like to change the background and foreground color and font style on each. I would need to do something like:

text1 = wx.StaticText(self, -1, "text1", size=(10,-1))
text1.SetBackgroundColour('#444444')
text1.SetForegroundColour('#ffffff')
text1.SetFont(text1)

text2 = wx.StaticText(self, -1, "text2", size=(30,-1))
text2.SetBackgroundColour('#444444')
text2.SetForegroundColour('#ffffff')
text2.SetFont(text1)

text3 = wx.StaticText(self, -1, "text3", size=(50,-1))
text3.SetBackgroundColour('#444444')
text3.SetForegroundColour('#ffffff')
text3.SetFont(text1)

Tedious right? Now imagine doing this for many many text controls, buttons, etc etc.

It sure would be nice to just use, say a function, to set the attributes of a particular control. So here's what I devised:

# Set the function that defines all of the attributes changes to the passed controls
def setControlAttributes(name, param):
    if param&1==1: name.SetBackgroundColour('#444444')
    if param>>1&1==1: name.SetForegroundColour('#ffffff')
    if param>>2&1==1: name.SetFont(text_font)

text1 = wx.StaticText(self, -1, "text1", size=(10,-1))
setControlAttributes(text1, 1)

text2 = wx.StaticText(self, -1, "text2", size=(30,-1))
setControlAttributes(text2, 4)

text3 = wx.StaticText(self, -1, "text3", size=(50,-1))
setControlAttributes(text3, 7)

In the above case, text1 will gain attribute 1 properties, text2 will gain attribute 2 properties, and text3 will gain all three attribute properties.

Remember 1 in binary is 001, 4 is 010, and 7 is 111. Attribute 1 corresponds to the first bit, attribute the second bit, etc. You can add any number of attributes as you like (within reason). Hope this helps someone out there.

Edited by convoluted: n/a

3
Contributors
3
Replies
4
Views
6 Years
Discussion Span
Last Post by convoluted
0

Another way to to add the controls to a list.

# initialize controls
text_ctrls = []
for x in xrange(1,4):
    text_ctrls.append(wx.StaticText(self, -1, "Text%d" %x, size=( (x-1)*20+10 ,-1)))

# set attributes
for x in xrange(3):
    text_ctrls[x].SetBackgroundColour(color[x])  # color can be initialized in a list somewhere
0

Why don't use regular, readable function:

def mystatic(self,label,size,font):
    text = wx.StaticText(self, -1, label, size=(size,-1))
    text.SetBackgroundColour('#444444')
    text.SetForegroundColour('#ffffff')
    text.SetFont(font)
    return text
0

Wow, thanks tonyjv, that never even occurred to me! I'll have to give that a try, indeed it looks a lot more readable and simple.

cghtkh, I'll give that method a try too, looks promising too.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.