LINUX.ORG.RU

вопрос по gtk


0

1

суть в следующем : создаю textview виджет и ставлю ему размер (700 , -1) - тоесть длина фиксированная а высота зависит от количества текста так как wrap mode - перенос по словам , затем софт вставляет туда текст рандомной длины , как после этого определить текущий размер виджета в пикселях ?

Ответ на: # от acckyiboxxx

вобщем оказалось все не так просто как хотелось-бы :

для начала поясню суть приложения - 1) с сервера загружаеться инфа (текст рандомной длины) 2) в gtk.Layout() вставляеться gtk.TextView постоянной длины но переменной высоты wrap mode - перенос по словам 3) полученный текст разбиваеться на несколько частей и отформатированный при помощи gtk.TextTag инсертиться в несколько заходов в gtk.TextView 4) определив длину gtk.TextView после вставки текста под ним тыкаються несколько кнопок и полей ввода (gtk.Entry) 5) все повторяеться для каждого полученного с сервера текста (их кол-во динамическое)

а теперь к техническим вопросам :

если пытаться получить allocation до отлова событий оно вылает всякую ересь , о чем я и написал постом выше , но костыль был найден , вот он

self._agtview.connect(«size-request» , self._alloc) # self._agtview обьект класса gtk.TextView

def _alloc(self , widget , allocation):

self.__chey = allocation.height

self.__cwid = allocation.width

print allocation.width , ' hey = ' , allocation.height

принт заюзан в функции для того что-бы видеть что выдает аллокэйшен , и он выдает все верно но есть одно но - событие «size-request» выскакивает несколько раз , ниже привожу вывод от принта

192 hey = 255

664 hey = 255

664 hey = 323

из него видно что высота увеличиваеться (что логично при добавлении текста) но это создает проблему так как мне нужно получить конечную высоту и уже от нее отсчитав 10 пикселей располагать следующий виджет , но каким образом спалить то что это была последняя сработка «size-request» я не знаю , мб кто-нибудь подскажет выход из положения

acckyiboxxx
() автор топика
Ответ на: комментарий от waker

!

никак по той причине что к vbox не прикрутить скроллинг (он у меня прикручен к gtk.layout) единственное чем он может упростить задачу так это если после упаковки всех виджетов в vbox определить его высоту и подогнав высоту gtk.Layout под полученное значение воткнуть его туда

acckyiboxxx
() автор топика
Ответ на: ! от acckyiboxxx

Эм. Нипонял. Берешь скроллирующий контейнер. Внутрь ложишь vbox. В каждую ячейку vbox ложишь еще один box и размешаешь в нём виджеты.

Или я не правильно понял задачу?

geekless ★★
()
Ответ на: комментарий от geekless

#

это возможно но есть один косяк , в качестве сколлящегося контейнера у меня gtk.layout но смысл в том что если не задать его размер явно при помощи set_size() скроллинг «отваливаеться» поэтому разместив все внутри vbox я должен определить какую высоту он имеет , после чего про помощи set_size точно такую-же высоту выставить у родителя (gtk.Layout)

когда я пытался колдовать над получением размера gtk.TextView была проблема которую я уже описал выше , сейчас курю решение относительно vbox

acckyiboxxx
() автор топика
Ответ на: # от acckyiboxxx

вопрос снят

я сказочный долбаеб , запилил тупо ресайз при каждом событии “size-request” и все заработало , просто размер увеличиваеться постепенно а не одним рывком , еще раз спасибо всем за внимание , вопрос решен .

acckyiboxxx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.