Gtk FlowBox - 框可点击区域中的按钮很小
Gtk FlowBox - buttons in box clickable area tiny
我创建了一个 GtkFlowBox,我在其中添加了很多按钮,并试图使用一个功能来捕捉对这些按钮的点击,目前,该功能仅输出所选按钮。但是,每个按钮的实际可点击区域很小——您需要点击按钮的右角才能注册。
我似乎无法在 GtkFlowBox class 和 GtkButton class 中找到任何选项来扩展子项的可点击区域。下面是一个演示的最小工作示例。
class NotebookWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="FlowBox Test")
#Create Application Window
self.set_border_width(10)
self.set_default_size(800, 600)
self.set_position(Gtk.WindowPosition.CENTER)
#Add external container (box)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.add(vbox)
#Add tabbed window
self.nbook = Gtk.Notebook()
vbox.pack_start(self.nbook, True, True, 0)
self.nbook.show()
#Add Clubs tab
frame = Gtk.Frame()
frame.show()
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
club_box = Gtk.FlowBox()
club_box.set_valign(Gtk.Align.START)
club_box.set_max_children_per_line(30)
club_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
club_box.set_activate_on_single_click(True)
for club in range(0, 55):
button = Gtk.Button(club)
club_box.add(button)
vbox.pack_start(club_box, True, True, 0)
self.out_message = Gtk.Label("\n")
vbox.add(self.out_message)
label = Gtk.Label()
label.set_markup("<b><big>Clubs</big></b>")
frame.add(vbox)
club_box.connect("child-activated", self.on_club_details)
self.nbook.append_page(frame, label)
def on_club_details(self, club_box, child):
print "clicked club box %d" % child.get_index()
win = NotebookWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
我认为您真正想要的是注册对按钮的点击,而不是当它们被激活时。按钮不一定在点击后立即激活。
我稍微简化了您的代码,但这是我认为您想要实现的目标:
class NotebookWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="FlowBox Test")
#Create Application Window
self.set_border_width(10)
self.set_default_size(400, 400)
self.set_position(Gtk.WindowPosition.CENTER)
#Add tabbed window
self.nbook = Gtk.Notebook()
self.add(self.nbook)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
club_box = Gtk.FlowBox()
club_box.set_valign(Gtk.Align.START)
club_box.set_max_children_per_line(30)
club_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
club_box.set_activate_on_single_click(True)
self.buttons = []
for club in range(0, 55):
button = Gtk.Button(label=club)
club_box.add(button)
button.connect('clicked', self.on_button_clicked) # new callback
self.buttons.append(button)
vbox.pack_start(club_box, True, True, 0)
self.out_message = Gtk.Label(label="\n")
vbox.pack_start(self.out_message, True, True, 0)
label = Gtk.Label()
label.set_markup("<b><big>Clubs</big></b>")
self.nbook.append_page(vbox, label)
def on_button_clicked(self, button):
for i in range(len(self.buttons)):
if self.buttons[i] == button:
print('button at index {}'.format(i))
break
win = NotebookWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
我创建了一个 GtkFlowBox,我在其中添加了很多按钮,并试图使用一个功能来捕捉对这些按钮的点击,目前,该功能仅输出所选按钮。但是,每个按钮的实际可点击区域很小——您需要点击按钮的右角才能注册。
我似乎无法在 GtkFlowBox class 和 GtkButton class 中找到任何选项来扩展子项的可点击区域。下面是一个演示的最小工作示例。
class NotebookWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="FlowBox Test")
#Create Application Window
self.set_border_width(10)
self.set_default_size(800, 600)
self.set_position(Gtk.WindowPosition.CENTER)
#Add external container (box)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.add(vbox)
#Add tabbed window
self.nbook = Gtk.Notebook()
vbox.pack_start(self.nbook, True, True, 0)
self.nbook.show()
#Add Clubs tab
frame = Gtk.Frame()
frame.show()
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
club_box = Gtk.FlowBox()
club_box.set_valign(Gtk.Align.START)
club_box.set_max_children_per_line(30)
club_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
club_box.set_activate_on_single_click(True)
for club in range(0, 55):
button = Gtk.Button(club)
club_box.add(button)
vbox.pack_start(club_box, True, True, 0)
self.out_message = Gtk.Label("\n")
vbox.add(self.out_message)
label = Gtk.Label()
label.set_markup("<b><big>Clubs</big></b>")
frame.add(vbox)
club_box.connect("child-activated", self.on_club_details)
self.nbook.append_page(frame, label)
def on_club_details(self, club_box, child):
print "clicked club box %d" % child.get_index()
win = NotebookWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
我认为您真正想要的是注册对按钮的点击,而不是当它们被激活时。按钮不一定在点击后立即激活。
我稍微简化了您的代码,但这是我认为您想要实现的目标:
class NotebookWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="FlowBox Test")
#Create Application Window
self.set_border_width(10)
self.set_default_size(400, 400)
self.set_position(Gtk.WindowPosition.CENTER)
#Add tabbed window
self.nbook = Gtk.Notebook()
self.add(self.nbook)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
club_box = Gtk.FlowBox()
club_box.set_valign(Gtk.Align.START)
club_box.set_max_children_per_line(30)
club_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
club_box.set_activate_on_single_click(True)
self.buttons = []
for club in range(0, 55):
button = Gtk.Button(label=club)
club_box.add(button)
button.connect('clicked', self.on_button_clicked) # new callback
self.buttons.append(button)
vbox.pack_start(club_box, True, True, 0)
self.out_message = Gtk.Label(label="\n")
vbox.pack_start(self.out_message, True, True, 0)
label = Gtk.Label()
label.set_markup("<b><big>Clubs</big></b>")
self.nbook.append_page(vbox, label)
def on_button_clicked(self, button):
for i in range(len(self.buttons)):
if self.buttons[i] == button:
print('button at index {}'.format(i))
break
win = NotebookWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()