我目前正在开发一个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()
答案 0 :(得分:1)
我认为您在GTK中找到了一个错误,似乎[1, 65025]
中的某些内容正在搞乱。我的第一个猜测是,它是由form_data.delete($(this).attr('alt'))
$(this).remove()
未实现的事实引起的,因此我更改了您的代码以使用show_all
信号(FlowBox
但show
稍后发出)并检查它是否仍然发生。可悲的是...... ..
所以我觉得其他东西已经关闭,所以只需在realize
之后添加show
快速测试,这使得选择工作,但使self.show()
比需要更宽(可能是因为空窗口的默认宽度)。所以我在监听器中添加了Gtk.Window.__init__
,这实际上解决了这个问题。
完整的代码如下,但由于它是一个肮脏的解决方法,您仍应报告此错误。
Flowbox