我有一个包含16个正方形的pygtk表,每个正方形包含一个标签.标签名称为:label1,label2,label3,...,label16.
我也有一个每n秒触发一次的计时器.当计时器被触发时,其中一个正方形被突出显示(只需将其字体大小设置为18,将其余字体大小设置为12).
如果只有3个标签,代码将是这样的:
def update_grid(self):
if self.timer_id is not None:
self.__actual_choice = (self.__actual_choice % 16)+1
if self.__actual_choice == 1:
self.label1.modify_font(self.__font_big)
self.label2.modify_font(self.__font_small)
self.label3.modify_font(self.__font_small)
elif self.__actual_choice == 2:
self.label1.modify_font(self.__font_small)
self.label2.modify_font(self.__font_big)
self.label3.modify_font(self.__font_small)
elif self.__actual_choice == 3:
self.label1.modify_font(self.__font_small)
self.label2.modify_font(self.__font_small)
self.label3.modify_font(self.__font_big)
Run Code Online (Sandbox Code Playgroud)
但是有16个标签,代码将是巨大的.我想知道在python中是否有办法做类似的事情:
self.(label+"i").modify_font(self.__font_small)
Run Code Online (Sandbox Code Playgroud)
您可以使用内置函数,getattr()正如其他人所建议的那样:
label = getattr(self, 'label%d' % i)
label.modify_font(self.__font_small)
Run Code Online (Sandbox Code Playgroud)
但实际上,你最好将16 label秒存放在一个list.最后带有数字的大量变量是一种可怕的代码味道.
for index, label in enumerate(self.labels):
if index == self.__actual_choice:
label.modify_font(self.__font_big)
else:
label.modify_font(self.__font_small)
Run Code Online (Sandbox Code Playgroud)