#!/usr/bin/python3
import gi.repository
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class ListView(Gtk.ScrolledWindow):
innerBox = None
margins = [0, 0, 0, 0] # top, bottom, left, right
spacing = 3
def __init__(self):
Gtk.ScrolledWindow.__init__(self)
self.set_overlay_scrolling(True)
self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
self.initInnerbox()
def initInnerbox(self):
self.innerBox = Gtk.VBox()
self.add(self.innerBox)
self.innerBox.set_spacing(self.spacing)
self.innerBox.props.valign = Gtk.Align.START
def setMargins(self, margins):
self.margins = margins
self.set_margin_top(margins[0])
self.set_margin_bottom(margins[1])
self.set_margin_left(margins[2])
self.set_margin_right(margins[3])
def getMargins(self):
return self.margins
def setSpacing(self, spacing):
self.spacing = spacing
self.innerBox.set_spacing(self.spacing)
def getSpacing(self):
return self.spacing
def addItem(self, row):
print("scrollView add")
self.innerBox.add(row)
def clean(self):
# cleans the innerBox
if self.innerBox.get_children() is not None:
for child in self.innerBox.get_children():
self.innerBox.remove(child)
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
from ListView import ListView
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="ListView Sample")
self.set_default_size(256, 300)
self.listView = ListView()
self.listView.setMargins([1, 1, 1, 1])
self.listView.setSpacing(3)
self.add(self.listView)
itemsList = ["list item 1", "list item 2", "list item 3", "list item 4"]
for item in itemsList:
listButton = Gtk.Button(item, xalign=0)
listButton.get_style_context().add_class("flat")
listButton.connect("button-press-event", self.listButtonOnPress)
self.listView.addItem(listButton)
def listButtonOnPress(self, btn, event):
# Left Mouse Button OnClick
if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1:
print("%s onLeftClick" % btn.get_label())
# Right Mouse Button OnClick
if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3:
print("%s onRightClick" % btn.get_label())
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
srdr@aspr:~/Desktop/my-pygtk-listview-sample$ python3 app.py