Пишу простой плеер для прослушивания музыки с youtube, столкнулся с проблемой в поиске, а точнее в построении списка треков в Gtk.Box()

def render_search_result(self, *data):
        try:
            raw_html = helpers.search.get_search_results_html(data[0])
            vids = helpers.search.get_videos(raw_html)

            # print(vids)
            self.listhbox = Gtk.VBox()
            self.vbox.pack_start(self.listhbox, False, True, 5)
            for _ in vids:
                attrs = helpers.search.get_video_attrs(_)
                #NEED TO FIX EMPTY OUTPUT
                if attrs == None:
                    continue

                self.label_p = Gtk.Label(attrs['title'])
                self.button_p = Gtk.Button()
                self.play_image = Gtk.Image.new_from_icon_name(
                    "gtk-media-play",
                    Gtk.IconSize.MENU
                )
                self.button_p.set_image(self.play_image)
                self.button_p.connect("clicked", self.init_player_thread, attrs['id'])

                track_box = Gtk.VBox()
                self.listhbox.pack_start(track_box, False, True, 2)

                track_box.pack_start(self.button_p, False, True, 0)
                track_box.pack_start(Gtk.HSeparator(), False, False, 0)
                track_box.pack_start(self.label_p, False, True, 0)

            # self.scrolled_window.add_with_viewport(self.vbox)
            # self.add(self.scrolled_window)
            self.search_button.set_sensitive(True)
            self.show_all()
        except Exception as e:
            print(e)

    def search_keyword(self, widget):
        search = self.search_entry.get_text()
        if len(search) < 1:
            msg = 'Please, typing keyword for search'
            dialog = Gtk.MessageDialog(window, 0,
                Gtk.MessageType.INFO,
                Gtk.ButtonsType.OK, msg)
            dialog.run()
            dialog.destroy()
            return

        self.search_button.set_sensitive(False)
        threading.Thread(target=self.render_search_result, args=(search,)).start()

Правильно ли я в цикле строю виджеты? Потому что именно в этом моменте постоянно выходит, что приложение либо вообще фризит, либо выдает в вылете ошибки сегментаци и I/O, что чаще всего.