【发布时间】:2012-12-14 22:24:47
【问题描述】:
图片会解释标题:
在 LMDE 和 Ubuntu 12.04 下,我的 GtkIconView 看起来像这样 - 就图标之间的间距而言,它是正确的:
在 Ubuntu 12.10、13.04 和 Fedora 17 下相同的代码显示如下:
注意- 这是一个节奏盒python插件-源代码是here on GitHub
我检查了以下 GtkIconView 属性 - 它们在 Ubuntu 12.04 和错误显示的 12.10 版本中完全相同。
- 项目填充
- 行间距
- 列间距
- 项目宽度
当我将 text_column 或 markup_column(图标下的文本)设置为可见列(即从 -1 更改值)时,此显示行为会立即发生到列号。
如果文本列/标记列被隐藏(即值 -1),则所有发行版上的显示都是正确的。
由于在完全相同的音乐收藏上运行相同的代码 - 我只能推测 Fedora 17/Ubuntu 12.10/13.04 中较新的 GTK 库的行为不同。
我的 google-fu 只找到了听起来相同的 this reference。但是检查 ubuntu-accomplishment-viewer 源代码并没有真正启发我。
有没有其他人遇到过这种情况?对进一步调查的最佳方式有何建议?
好的 - 我已尝试将其简化为基本要素 - 这个简单的 glade 文件和这个简单的代码会产生这个问题。但是我仍然不知道是什么导致了这种视觉效果:/
#!/usr/bin/env python 从 gi.repository 导入 Gtk, GdkPixbuf 窗口 = Gtk.Window() window.connect('delete_event', Gtk.main_quit) ui = Gtk.Builder() ui.add_from_file('reproduce.ui') page = ui.get_object('main_box') window.add(页面) ls = Gtk.ListStore(str, GdkPixbuf.Pixbuf) 图标 = GdkPixbuf.Pixbuf.new_from_file_at_size( str("/usr/share/icons/gnome/48x48/actions/zoom-out.png"), 90, 90) 对于范围内的 i (15): ls.append(['项目 %d' % i, 图标]) cover_view = ui.get_object('covers_view') cover_view.set_model(ls) 封面视图.set_text_column(0) 覆盖视图.set_pixbuf_column(1) cover_view.set_item_width(100) # 这些行更容易看出问题 crt, crp = cover_view.get_cells() crt.set_property('背景', '#000') crt.set_property('前景', '#AAA') 打印 crt.get_request_mode() window.set_default_size(600,400) window.show_all() gtk.main()还有林间空地 - http://pastebin.com/uvQ9mWeg
根据deinonychusaur 的建议,我查看了gtkparasite
仅供参考 - 我在 Ubuntu 12.04 和 12.10 中都使用了现成的 PPA from AnthonyWong。
两个版本的结果相同。尝试使用应用更改 IconView 属性并没有真正解决这个问题。
恐爪龙的下一个建议看起来很有趣,我可以确认 - 即
IconView CellRendererText 是 Fedora 17/12.10/13.04 中 IconView Pixbuf 大小的 2 倍,但 12.04 中 IconView Pixbuf 大小 1 倍。
【问题讨论】:
-
两个想法:您是否 (a) 测试过使用 gtk 检查程序来查看可能导致问题的属性?如果这不可能 (b) 检查不同平台上的 gtk-versions,因为也许至少有一些更改日志可以引导您正确了解更改的内容?
-
工具:unix.stackexchange.com/questions/37626/… 和变更日志,我也不知道,但也许在 gtk 开发项目中...... gtk3 的 python 绑定确实记录不足。
-
您就在上面,因为它与文本相关,因为
CellRendererText的首选宽度为 180,如果设置为 100,则此值在window.show_all()处再次更改为 180。即使在显示所有内容后改回,它仍然会在Gtk.main()期间更改为 180。 (如果实际上将自己设置为CellRendererPixbuf的 2 倍宽度,可以看出如果将其更改为 100 而不是 90,导致CellRendererText变为 200) -
我还可以补充一点,该效果与包含两个渲染器的
CellAreaBox中的方向无关(如果其方向切换为水平,问题仍然存在)。也就是说,这不是打包 + 展开的问题。 -
我在您的代码中添加了一些行(希望没问题),所以
CellRendererText的大小是可见的。另外,如果您检查打印语句,上面写着<enum GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH of type GtkSizeRequestMode>,这可能与问题有关?有Gtk.SizeRequestMode.CONSTANT_SIZE,不知道怎么改。