Python ve GTK4 ile denemeler yapıyordum. Ancak GTK4’teki ColumnView widget’ı kullanıldığında her satırın alt ve üst sınırlarında sağ tıklanıp menü açılmayan bölgeler var. Bu nasıl aşılabilir? Tıklamaya duyarsız alanları aşağıdaki resimde kırmızıyla işaretledim. Sağ tıklayınca menü açılmıyor. Ama satırların orta kısımlarına sağ tıklayınca menü açılıyor. Bu durum GTK3’teki TreeView’da yoktu.

Basitleştirilmiş bir Python kodunu aşağıya ekledim.
import gi
gi.require_version("Gtk", "4.0")
gi.require_version("Gio", "2.0")
from gi.repository import Gtk, Gio, GObject, Gdk
class Person(GObject.Object):
def __init__(self, name, city):
super().__init__()
self.name = name
self.city = city
class AppWindow(Gtk.ApplicationWindow):
def __init__(self, app):
super().__init__(application=app, title="GTK4 ColumnView", default_width=400, default_height=300)
self.model = Gio.ListStore(item_type=Person)
self.model.append(Person("Abc Def", "İstanbul"))
self.model.append(Person("Klm Mno", "Ankara"))
self.model.append(Person("Prs Tui", "İzmir"))
self.selection_model = Gtk.SingleSelection(model=self.model)
self.column_view = Gtk.ColumnView(model=self.selection_model)
self.add_column("İsim", "name")
self.add_column("Şehir", "city")
scrolled = Gtk.ScrolledWindow()
scrolled.set_child(self.column_view)
self.set_child(scrolled)
def add_column(self, title, property_name):
factory = Gtk.SignalListItemFactory()
factory.connect("setup", self.on_factory_setup)
factory.connect("bind", self.on_factory_bind, property_name)
column = Gtk.ColumnViewColumn(title=title, factory=factory)
self.column_view.append_column(column)
def on_factory_setup(self, factory, list_item):
label = Gtk.Label(xalign=0)
list_item.set_child(label)
gesture = Gtk.GestureClick(button=3)
gesture.connect("pressed", self.on_row_right_click, list_item)
label.add_controller(gesture)
def on_factory_bind(self, factory, list_item, property_name):
item = list_item.get_item()
label = list_item.get_child()
label.set_text(getattr(item, property_name))
def on_row_right_click(self, gesture, n_press, x, y, list_item):
index = list_item.get_position()
self.selection_model.set_selected(index)
popover = Gtk.PopoverMenu()
popover.set_parent(list_item.get_child())
popover.set_has_arrow(True)
rect = Gdk.Rectangle()
popover.popup()
def on_edit_clicked(self, action, parameter):
pass
def on_delete_clicked(self, action, parameter):
pass
def on_activate(app):
win = AppWindow(app)
win.present()
app = Gtk.Application(application_id="com.example.ColumnViewMenu")
app.connect("activate", on_activate)
app.run(None)




