fos*_*dom 9 python pygobject gtk3
图片将解释标题:
在LMDE和Ubuntu 12.04下,我的GtkIconView看起来像这样 - 它在图标之间的间距方面是正确的:

在Ubuntu 12.10,13.04和Fedora 17下,相同的代码显示如下:

NB - 这是一个rhythmbox python插件 - 源代码在GitHub上
我检查了以下GtkIconView属性 - 它们在Ubuntu 12.04和错误显示的12.10版本之间完全相同.
当我将text_column或markup_column(图标下的文本)设置为可见列(即将值从-1更改为列号)时,会立即显示此显示行为.
如果文本列/标记列被隐藏(即值为-1),则显示在所有发行版上都是正确的.
由于它在完全相同的音乐集合上运行相同的代码 - 我只能推测Fedora 17/Ubuntu 12.10/13.04中较新的GTK库表现不同.
我的google-fu只发现了这个听起来相同的引用.然而,检查ubuntu-achievementment-viewer源代码并没有真正启发我.
有没有人遇到过这个?关于进一步调查的最佳方法的任何建议?
好的 - 我已经尝试将其简化为基本要素 - 这个简单的glade文件使用这个简单的代码会产生这个问题.然而,我仍然不知道造成这种视觉效果的原因:/
#!/usr/bin/env python
from gi.repository import Gtk, GdkPixbuf
window = 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(page)
ls = Gtk.ListStore(str, GdkPixbuf.Pixbuf)
icon = GdkPixbuf.Pixbuf.new_from_file_at_size(
str("/usr/share/icons/gnome/48x48/actions/zoom-out.png"), 90, 90)
for i in range(15):
ls.append(['Item %d' % i, icon])
covers_view = ui.get_object('covers_view')
covers_view.set_model(ls)
covers_view.set_text_column(0)
covers_view.set_pixbuf_column(1)
covers_view.set_item_width(100)
# These lines make it easier to see the problem
crt, crp = covers_view.get_cells()
crt.set_property('background', '#000')
crt.set_property('foreground', '#AAA')
print crt.get_request_mode()
window.set_default_size(600,400)
window.show_all()
Gtk.main()
和林间空地 - http://pastebin.com/uvQ9mWeg
根据deinonychusaur的建议,我查看了gtkparasite
仅供参考 - 我使用了AnthonyWong的现成PPA用于Ubuntu 12.04和12.10.
两个版本的结果完全相同.尝试使用应用程序更改IconView属性并没有真正解决这个问题.
来自deinonychusaur的下一个建议看起来非常有趣,我可以确认 - 即
IconView CellRendererText是Fedora 17/12.10/13.04中IconView Pixbuf的2倍,但是12.04中IconView Pixbuf的1倍.
上游GTK开发人员决定更改算法,以了解如何计算IconView的TextRenderer单元格的宽度.
在这里,我们使用相同的旧猜测,尝试图标大小并设置列表中找到的第一个图标的大小的两倍,天真,但大部分时间工作
此更改是在Ubuntu 12.04和LMDE中使用较旧的GTK版本之后提交的.它在Ubuntu 12.10和13.04以及Fedora 17中找到了后来的GTK版本.
自从Ubuntu 12.04发布以来,这个问题已经发生了一年多,这似乎不是一个错误,而是一个设计决定.
也许有点奇怪 - 在Bugzilla 上报道了另一个应用程序(Pitivi视频编辑器),但在撰写本文时,这仍处于未经证实的状态.
在该链接中有用的是附件,提供了一种解决方法,您可以在其中创建CellRendererText,并在定义标记/文本列之前将其分配给IconView.
以下是我对解决方法的解释
cover_size=100 markup_text="some text" self._text_renderer = Gtk.CellRendererText() self._text_renderer.props.alignment = Pango.Alignment.CENTER self._text_renderer.props.wrap_mode = Pango.WrapMode.WORD self._text_renderer.props.xalign = 0.5 self._text_renderer.props.yalign = 0 self._text_renderer.props.width = cover_size self._text_renderer.props.wrap_width = cover_size self._cover_view.pack_end(self._text_renderer, False) self._cover_view.add_attribute(self._text_renderer, 'markup', markup_text)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |