Python делает gtk.Layout с полосами прокрутки - PullRequest
0 голосов
/ 18 августа 2011

Как я могу иметь полосу прокрутки внутри gtk.Layout.

Например, в моем коде у меня есть:

import pygtk
pygtk.require('2.0')
import gtk

class ScrolledWindowExample:
    def __init__(self):
        self.window = gtk.Dialog()
        self.window.connect("destroy", self.destroy)
        self.window.set_size_request(300, 300)

        self.scrolled_window = gtk.ScrolledWindow()
        self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

        self.window.vbox.pack_start(self.scrolled_window, True, True, 0)

        self.layout = gtk.Layout()
        self.scrolled_window.add(self.layout)

        self.current_pos = 0
        self.add_buttom()
        self.window.show_all()

    def add_buttom(self, widget = None):
            title = str(self.current_pos)
            button = gtk.ToggleButton(title)
            button.connect_object("clicked", self.add_buttom, None)
            self.layout.put(button, self.current_pos, self.current_pos)
            button.show()
            self.current_pos += 20

    def destroy(self, widget):
        gtk.main_quit()

if __name__ == "__main__":
    ScrolledWindowExample()
    gtk.main()

Что я действительно хочу, так это найти способ сделать динамическую прокрутку. Посмотрите пример, который я привел выше, когда вы нажимаете любую кнопку, будет добавлена ​​другая кнопка. Но полоса прокрутки не работает.

Что я могу сделать, чтобы заработали полосы прокрутки?

1 Ответ

0 голосов
/ 19 августа 2011

Работает ли это, если вы используете gtk.Window() вместо gtk.Dialog();или выполнить self.window.run() после self.window.show_all()?

Разница между диалоговым окном и обычным окном заключается в том, что диалоговое окно диалога имеет собственный цикл обработки событий.Поскольку вы не запускаете команду run(), этот цикл никогда не получает возможность перехватить события, поэтому ScrolledWindow не получает их и не меняет их размер.

...