Mam gtk.iconview z kilkoma ikonami. Czasami zmieniam rozmiar okna, aby zobaczyć więcej ikon. Kiedy to robię, dodatkowa powierzchnia wygenerowana nie jest równomiernie rozprowadzana między wszystkimi kolumnami. Zamiast tego wszystko zostaje umieszczony po prawej, dopóki nie ma wystarczającej ilości miejsca na nową kolumnę.

Nie widzę niczego w Dokumentacja pozwoliłaby mi to zrobić to automatycznie. Czy muszę sprawdzić sygnały zmiany rozmiaru, a następnie ręcznie ustawić kolumnę i odstępy rzędowe? Jeśli tak, który zmienia rozmiar sygnału, którego używam.

Oto zdjęcie tego, co mam na myśli. Zaznaczyłem dodatkową przestrzeń na czerwono.

enter image description here

To jest to, co chciałbym zobaczyć (oczywiście, z lukami faktycznie rozmieszczonych, w przeciwieństwie do mojej słabej pracy MS Paint).

enter image description here

2
Kris Harper 1 listopad 2011, 19:00

3 odpowiedzi

Najlepsza odpowiedź

Spotkaliśmy się z tym problemem w przeglądarce osiągnięciach Ubuntu i jak udało nam się rozwiązać, przedstawię nasze rozwiązanie.

Sztuczka jest do Umieść GTKiconview w GtkscrolledWindow , i ustaw go HSCrollBar_Policy do "zawsze". Następnie należy użyć sygnału czeku rozmiaru, aby reagować, gdy użytkownik zmienia rozmiar okna (zauważ, że należy sprawdzić, czy rozmiar się zmienił, dla sygnału jest emitowany również, gdy np. Okno jest przeciągane). Gdy zmienia się rozmiar, model używany przez GTKiconview musi być wyczyszczony i odtworzony, ponieważ wyzwalacze Gtkiconview prawidłowo przetwarza nowo zdobytą przestrzeń (lub kurczenie się). , w wyniku czego wynik poziomy przewijania nigdy nie zostanie zaobserwowany, ponieważ GTKiconview używa dokładnie tak wiele przestrzeni, jak używa GtkscrolledWindow.

1
rafalcieslak 24 kwiecień 2012, 16:00

Yeap, wydaje się po bardzo tłustym wyglądie, że musisz to zrobić samodzielnie. I odnoszący się do sygnału, sprawdziłbym GTKContainer :: Rezydnia sprawdzana .

0
erick2red 2 listopad 2011, 16:11

Użyj zdarzenia size_aloke.

Zdefiniowałem moją klasę:

class toto(Gtk.IconView):
    def __init__(self):
        super(toto,self).__init__()
        self.connect("size_allocate",self.resize)
        self.set_columns(4)

Następnie zmodyfikowałem liczbę kolumn roboczych

def resize(self,_iv,_rect):
    print("X",rect.x)
    print("Y",rect.y)
    print("W",rect.width)
    print("H",rect.height)
    # calculate number of columns, let's say 3
    _cols=3
    self.set_columns(_cols)

Wydaje mi się działać dla mnie

0
fossfreedom 26 maj 2014, 19:26