Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: PyGTK и релоад виджетов  (Прочитано 444 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kozak[UA]

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Убить всех людей...
    • Просмотр профиля
PyGTK и релоад виджетов
« : 21 Февраль 2011, 17:36:46 »
Добрый вечер уважаемые форумчане.
Пишу свою GUI. Возник следующий вопрос:
Создатся окно. В окне создаёться боковая панель в которую упаковываются 1)виджет календарь; 2) кнопка; 3) текствью. Есть обработка сигнала выбора даты в календаре которая вызывает некую функцию которая возвращает строку, эту строку мне надо вставить в текствью. Ну тоесть в текствью должен вставляться текст в зависимости от того какая дата выбрана.

Внимание сам вопрос:
Как правильно перегружать содержимое виджета текствью.

Ведь на сколько я понимаю мне необходимо перегрузить сам виджет (перерисовать виджет в окне). Как это правильно делается? Сейчас ни чего лучше чем удалять окно и заного его отрисовывать я не придумал. Но это же явно не правильно.
Напишите пожалуста саму логику как это делаеться в нормальных приложениях.

Заранее спасибо за ответ.
Asus K40ij: Ubuntu 10.04
Desktop (amd atlon 3500+, 1G DDR1, Samsung 320G, Radeon express 200): ArchLinux

Оффлайн cav

  • Любитель
  • *
  • Сообщений: 57
    • Просмотр профиля
    • Истории одного программера
Re: PyGTK и релоад виджетов
« Ответ #1 : 28 Февраль 2011, 07:48:41 »
перегружать виджет не нужно. достаточно метод дернуть у текствью. к примеру у меня выглядит так :
     cl=CalendarBox()
     cl.run()
     self.dt.set_text(cl.get_data())
     cl.destroy()
где self.dt  - это gtk.Entry

(Ubuntu 12.04, Ubuntu 10.04)
http://cavinc.blogspot.com/

Оффлайн Kozak[UA]

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Убить всех людей...
    • Просмотр профиля
Re: PyGTK и релоад виджетов
« Ответ #2 : 28 Февраль 2011, 12:34:53 »
перегружать виджет не нужно. достаточно метод дернуть у текствью. к примеру у меня выглядит так :
     cl=CalendarBox()
     cl.run()
     self.dt.set_text(cl.get_data())
     cl.destroy()
где self.dt  - это gtk.Entry
хм, как то не совсем понятно. Если не трудно, напишите чуть развернуто. Заранее благодарен
Asus K40ij: Ubuntu 10.04
Desktop (amd atlon 3500+, 1G DDR1, Samsung 320G, Radeon express 200): ArchLinux

Оффлайн cav

  • Любитель
  • *
  • Сообщений: 57
    • Просмотр профиля
    • Истории одного программера
Re: PyGTK и релоад виджетов
« Ответ #3 : 28 Февраль 2011, 13:49:20 »
вот 2 класса из проекта
class CalendarBox(gtk.Dialog):
    sel_date=None

    def __close__(self,widget):
     self.response(gtk.RESPONSE_CLOSE)

    def __on_click(self,widget):
      year, month, day=self.calendar.get_date()
      self.sel_date=str(day)+'.'+str(month)+'.'+str(year)
      self.__close__(widget)
     
    def get_data(self):
      return self.sel_date
 
    def __init__(self):
      super(CalendarBox,self).__init__()
      self.set_decorated(False)
      self.calendar=gtk.Calendar()
      self.vbox.pack_start(self.calendar,False,True,4)
      bt1=gtk.Button('Принять')
      bt2=gtk.Button('Закрыть')
      bt1.connect('clicked',self.__on_click)
      bt2.connect('clicked',self.__close__)
      self.action_area.pack_start(bt1,False,True,4)
      self.action_area.pack_start(bt2,False,True,4)
      self.show_all()

class DateEditEntry(gtk.HBox):
   ''' создает горизонтальный бокс с строкой ввода и кнопкой для выбора даты (через caledar) '''   
   def get_text(self):
     return self.dt.get_text()
   def set_text(self,value):
     self.dt.set_text(value)
 
   def __on_click(self,widget,data=None):
    '''  обрабатываем нажатие на кнопку '''
     cl=CalendarBox()
     cl.run()
     self.dt.set_text(cl.get_data()) # используя метот set_text вносим в виджет данные
     cl.destroy()


   def __init__(self):
     super(DateEditEntry,self).__init__(False)
     self.dt=gtk.Entry(10)
     self.pack_start(self.dt,False,False,0)
     bt=gtk.Button('...')
     bt.connect('clicked',self.__on_click,'calendar')
     bt.set_tooltip_text('Календарь')
     self.pack_start(bt,False,False,0)

ну а класс выбора даты   data1=DateEditEntry()  где data1 наш виджет который мы можем поместить куда хотим
« Последнее редактирование: 28 Февраль 2011, 13:51:23 от cav »
(Ubuntu 12.04, Ubuntu 10.04)
http://cavinc.blogspot.com/

 

Страница сгенерирована за 0.053 секунд. Запросов: 24.