Gtk + FlowBox选择不起作用

时间:2016-08-22 00:02:47

标签: python gtk gtk3 gnome pygobject

我目前正在开发一个PyGObject应用程序,而且我在Gtk + FlowBox中选择特定子项时遇到问题。即使在选择FlowBox选择模式(SINGLE)填充FlowBox并编写代码以选择特定子项后,也始终选择第一个子项。

2000

即使我选择在索引2处选择子项,应用程序也只显示第一个被选中的子项: Screenshot of above code running

奇怪的是,当我使用以下代码(位于" self.add(flowbox)"行之前)检查选择哪个孩子时,终端显示我指定的孩子要选择(在索引2处)是唯一选定的子项,即使该窗口仅显示正在选择的第一个子项:

#!/usr/bin/python

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio

class App(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="App")

        flowbox = Gtk.FlowBox()
        flowbox.set_valign(Gtk.Align.START)
        flowbox.set_selection_mode(Gtk.SelectionMode.SINGLE)

        # Drawing 3 squares
        flowbox.add(self.drawing_area())
        flowbox.add(self.drawing_area())
        flowbox.add(self.drawing_area())

        child = flowbox.get_child_at_index(2)
        flowbox.select_child(child)
        flowbox.queue_draw()

        self.add(flowbox)

    def drawing_area(self):
        preview = Gtk.DrawingArea()
        preview.connect("draw", self.draw_square)
        preview.set_size_request(150, 150)
        return preview

    def draw_square(self, widget, cr):
        cr.scale(150, 150)

        style_context = widget.get_style_context()
        color = style_context.get_color(Gtk.StateFlags.NORMAL)
        cr.set_source_rgba(*color)

        cr.rectangle(0, 0, 1, 1)
        cr.fill()

window = App()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

1 个答案:

答案 0 :(得分:1)

我认为您在GTK中找到了一个错误,似乎[1, 65025]中的某些内容正在搞乱。我的第一个猜测是,它是由form_data.delete($(this).attr('alt')) $(this).remove() 未实现的事实引起的,因此我更改了您的代码以使用show_all信号(FlowBoxshow稍后发出)并检查它是否仍然发生。可悲的是...... ..

所以我觉得其他东西已经关闭,所以只需在realize之后添加show快速测试,这使得选择工作,但使self.show()比需要更宽(可能是因为空窗口的默认宽度)。所以我在监听器中添加了Gtk.Window.__init__,这实际上解决了这个问题。

完整的代码如下,但由于它是一个肮脏的解决方法,您仍应报告此错误。

Flowbox