Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как красиво написать следующий код [RSS Feed]

#1 Ноя. 8, 2008 22:37:18

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Сейчас есть такой код:

	        	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() ?



Офлайн

#2 Ноя. 8, 2008 23:28:15

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Ну так записывайте :)
Просто вместо

self.bind_controls(dic)
пишите
filter(lambda x:setattr(self,x[0],x1),dic.items())

Офлайн

#3 Ноя. 9, 2008 00:02:09

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

брымс. а кто будет заводить все эти переменые: self.window, self.scr_list
Питон будет ругаться, что переменная неизвестная, когда будет создавать словарь.



Отредактировано (Ноя. 9, 2008 00:03:13)

Офлайн

#4 Ноя. 9, 2008 00:13:02

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Согласен. В 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)
Но это возможно, как я понимаю, благодаря тому, что набор событий заранее предопределен.



Офлайн

#5 Ноя. 9, 2008 00:34:32

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Я имел в виду код вверху.
Такой код, например, работает:

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)

Отредактировано (Ноя. 9, 2008 00:35:40)

Офлайн

#6 Ноя. 9, 2008 01:01:54

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Работает. Спасибо.



Офлайн

#7 Ноя. 9, 2008 01:08:13

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

А можешь пояснить, почему filter, а не, скажем, apply?
Мы же применяем функцию к каждому элементу списка.



Офлайн

#8 Ноя. 9, 2008 02:18:31

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

demas
А можешь пояснить, почему filter, а не, скажем, apply?
Мы же применяем функцию к каждому элементу списка.
Кстати, скорее всего, Ferroman имел ввиду `map`, поскольку `filter` тут как-то не очень к месту, хотя по стечению обстоятельств логику не рушит:-)

apply в питоне к спискам отношение не имеет.



Офлайн

#9 Ноя. 9, 2008 02:30:11

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

apply
Deprecated since release 2.3. Use the extended call syntax with *args and **keywords instead.
Я ей никогда не пользовался. Да и судя по описанию эта функция просто передаёт параметры функции, то есть весь список, а не по-элементно, как надо.
Может правильнее вообще map использовать.

Офлайн

#10 Ноя. 9, 2008 02:32:37

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как красиво написать следующий код

Я так гляжу, я тут не один полуночник ;)

Офлайн

  • Начало
  • » GUI
  • » Как красиво написать следующий код[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version