Найти - Пользователи
Полная версия: Как красиво написать следующий код
Начало » GUI » Как красиво написать следующий код
1 2
demas
Сейчас есть такой код:

	        	self.wTree = gtk.glade.XML(design) 
self.window = self.wTree.get_widget("window1")
self.scr_list = self.wTree.get_widget("scr_list")
self.description = self.wTree.get_widget("Description")
self.person = self.wTree.get_widget("person_ctrl")
self.project = self.wTree.get_widget("project_ctrl")
self.system = self.wTree.get_widget("system_ctrl")
self.type = self.wTree.get_widget("type_ctrl")
self.priority = self.wTree.get_widget("priority_ctrl")
self.startdate = self.wTree.get_widget("startdate_ctrl")
self.author = self.wTree.get_widget("author_ctrl")
self.responsible = self.wTree.get_widget("responsible_ctrl")
self.controller = self.wTree.get_widget("controller_ctrl")
Хочется записать как то так:
		dic = { "window1" : self.window,
"scr_list" : self.scr_list,
......
}
self.bind_controls(dic)
Можно ли так сделать и как в этом случае должен выглядеть bind_controls() ?
Ferroman
Ну так записывайте :)
Просто вместо
self.bind_controls(dic)
пишите
filter(lambda x:setattr(self,x[0],x1),dic.items())
shiza
брымс. а кто будет заводить все эти переменые: self.window, self.scr_list
Питон будет ругаться, что переменная неизвестная, когда будет создавать словарь.
demas
Согласен. В gtk-glade подобным образом можно навесить события:

		dic = { "on_scr_list_row_activated" : self.on_scr_select,
"on_scr_list_cursor_changed" : self.on_scr_activate
}
self.wTree.signal_autoconnect(dic)
Но это возможно, как я понимаю, благодаря тому, что набор событий заранее предопределен.
Ferroman
Я имел в виду код вверху.
Такой код, например, работает:
class New():
def __init__(self):
self.bb = "aaa"
self.ff = "fff"
dic = { "kkk": self.bb,
"qqq": "qqqq"}
filter(lambda x:setattr(self,x[0],x[1]),dic.items())
print New().kkk
т.е. первую часть можно записать так:
    dict = { 'window': self.wTree.get_widget("window1"),
'scr_list':self.wTree.get_widget("scr_list"),
'description' : self.wTree.get_widget("Description")
}
filter(lambda x:setattr(self,x[0],x1),dic.items())
Ну и можно сделать функцию, и потом ее использовать, например так:
  connect_params(self, wTree, dict)
demas
Работает. Спасибо.
demas
А можешь пояснить, почему filter, а не, скажем, apply?
Мы же применяем функцию к каждому элементу списка.
Александр Кошелев
demas
А можешь пояснить, почему filter, а не, скажем, apply?
Мы же применяем функцию к каждому элементу списка.
Кстати, скорее всего, Ferroman имел ввиду `map`, поскольку `filter` тут как-то не очень к месту, хотя по стечению обстоятельств логику не рушит:-)

apply в питоне к спискам отношение не имеет.
Ferroman
apply
Deprecated since release 2.3. Use the extended call syntax with *args and **keywords instead.
Я ей никогда не пользовался. Да и судя по описанию эта функция просто передаёт параметры функции, то есть весь список, а не по-элементно, как надо.
Может правильнее вообще map использовать.
Ferroman
Я так гляжу, я тут не один полуночник ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB