PyGObject: подключить Gtk.ListBoxRow к своей собственной функции? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть for l oop, подключенный к файлу JSON для генерации группы строк для Gtk.Listbox. Я хочу, чтобы у каждого ListBoxRow была своя собственная функция.

Но я не могу подключить ListBoxRow к функции, когда она нажата. Вместо этого я должен подключить Gtk.ListBox к функции. Но затем, когда я выбираю ListBoxRow, он запускает каждую функцию, созданную для ListBoxRow с.

Вот код:

        for ssb in repo["iceapps"]:
            exec("def " + ssb["id"] + """_clicked(self, row):
    subprocess.Popen(["./ice", "--ssbname", \"""" + ssb["name"] +"\", \"--ssburl\", \"" + ssb["url"] + "\", \"--dialogmode\", \"True\"])")

            exec("self." + ssb["id"] + "Row = Gtk.ListBoxRow()")
            exec("self." + ssb["id"] + "Box = Gtk.Box()")
            exec("self." + ssb["id"] + "Grid = Gtk.Grid()")
            exec("self." + ssb["id"] + "Grid.set_row_spacing(3)")
            exec("self." + ssb["id"] + "Grid.set_column_spacing(20)")
            exec("self." + ssb["id"] + "Image = Gtk.Image()")
            exec("self." + ssb["id"] + "Image.set_from_icon_name(\"gedit\", Gtk.IconSize.DIALOG)")
            exec("self." + ssb["id"] + "Grid.attach(self." + ssb["id"] + "Image, 1, 3, 2, 2)")
            exec("self." + ssb["id"] + "NameLabel = Gtk.Label()")
            exec("self." + ssb["id"] + "NameLabel.set_markup(\"<b>\" + ssb[\"name\"] + \"</b>          <small><i>(\" + ssb[\"url\"] + \")</i></small>\")")
            exec("self." + ssb["id"] + "Grid.attach(self." + ssb["id"] + "NameLabel, 3, 3, 3, 1)")
            exec("self." + ssb["id"] + "DescriptionLabel = Gtk.Label(label=ssb[\"description\"])")
            exec("self." + ssb["id"] + "DescriptionLabel.set_justify(Gtk.Justification.LEFT)")
            exec("self." + ssb["id"] + "Grid.attach(self." + ssb["id"] + "DescriptionLabel, 3, 1, 1)")
            exec("self." + ssb["catagory"] + "ListBoxRow.connect(\"row_selected\", " + ssb["id"] + "_clicked)") # Line I'm trying to fix. Doesn't work. I can do ListBox.connect instead of ListBoxRow, but than, if I click any row, it executes all the functions.
            exec("self." + ssb["id"] + "Box.pack_start(self." + ssb["id"] + "Grid, True, True, 0)")
            exec("self." + ssb["id"] + "Row.add(self." + ssb["id"] + "Box)")
            exec("self." + ssb["catagory"] + "List.add(self." + ssb["id"] + "Row)")

Строка 19 - это строка I ' Я пытаюсь исправить.

...