У меня есть 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 ' Я пытаюсь исправить.