9

写真はタイトルを説明します:

LMDE および Ubuntu 12.04 では、私の GtkIconView は次のようになります。アイコン間の間隔に関しては正しいです。

間隔 Ubuntu 12 04 RB 96

Ubuntu 12.10、13.04、および Fedora 17 では、同じコードが次のように表示されます。

間隔 Ubuntu 12 10 RB 97

注意 - これは python の 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-accomplishment-viewer のソース コードを調べても、あまり理解が得られませんでした。

他の誰かがこれに遭遇しましたか?さらに調査するための最良の方法に関する提案はありますか?


わかりました - 私はこれを必要最小限に抑えようとしました - この単純なコードを含むこの単純な空き地ファイルは、この問題を引き起こします。しかし、私はまだこの視覚効果を引き起こしているものは賢明ではありません:/

#!/usr/bin/env パイソン

gi.repository から Gtk、GdkPixbuf をインポート

ウィンドウ = Gtk.Window()
window.connect('delete_event', Gtk.main_quit)

ui = Gtk.Builder()
ui.add_from_file('reproduce.ui')

ページ = 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(['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)

# これらの行により、問題を簡単に確認できます
crt、crp = covers_view.get_cells()
crt.set_property('背景', '#000')
crt.set_property('フォアグラウンド', '#AAA')
print 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の両方にAnthonyWongの既製のPPAを使用しました。

両方のバージョンの結果は同じでした。アプリを使用して IconView プロパティを変更して実験しても、これは実際には解決しませんでした。

deinonychusaur からの次の提案は非常に興味深いようで、確認できます。

IconView CellRendererText は、Fedora 17/12.10/13.04 の IconView Pixbuf のサイズの 2 倍ですが、12.04 の IconView Pixbuf のサイズの 1 倍です。

4

3 に答える 3

6

観察の理由。

上流の GTK 開発者は、IconView の TextRenderer セルの幅を計算する方法に関するアルゴリズムを変更することにしました。

ここでは、同じ古い推測を使用して、アイコンのサイズを試して、リストで最初に見つかったアイコンの 2 倍のサイズを設定します。素朴ですが、ほとんどの場合は機能します

この変更は、Ubuntu 12.04 および LMDE の古い GTK バージョンの後にコミットされました。それは、Ubuntu 12.10 & 13.04 & Fedora 17 で見つかった後の GTK バージョンに侵入しました。

バグまたはバグなし

この問題は Ubuntu 12.04 がリリースされてから 1 年以上にわたって発生しているため、これはバグではなく設計上の決定のようです。

おそらく少し奇妙です - Bugzilla では、これは別のアプリケーション (Pitivi ビデオ エディター) について報告されましたが、執筆時点ではまだ未確認の状態です。

回避策

そのリンクで役に立ったのは、CellRendererText を作成し、マークアップ/テキスト列が定義される前にこれを IconView に割り当てるという回避策を提供する添付ファイルでした。

以下は回避策の私の解釈です

表紙サイズ=100
markup_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_text)
于 2013-01-04T20:39:30.163 に答える
2

@qama が「on-resize-set-size-request hack」について述べたことを使用して、動作を修正できます (ただし、実際にはハック的な方法で)。

コールバックを追加するだけです:

def keep_size(crt, *args):

    crt.handler_block(crt_notify)
    crt.set_property('width', 100)
    crt.handler_unblock(crt_notify)

そしてそれをに接続しますCellRendererText

crt, crp = covers_view.get_cells()
crt_notify = crt.connect('notify', keep_size)

コールバックに a を追加するprint crt, argsと、約 10 ~ 20 回そこに移動することがわかります...プロパティwidthwrap-width

于 2013-01-04T13:17:15.150 に答える
0

これを適切に再現するには:

  • システム gtk rc を使用しないでください
  • ユーザー gtk rc を使用しないでください
  • 独自の gtk rc のみを適用する
  • たとえば、virtualboxで両方のバージョンをセットアップします
  • dpi などのシステム パラメータを均等化する
  • 同じデータで実行
  • 正確なバージョンの使用、py、pygtk、gtk+、依存ライブラリを投稿

そうは言っても、gtk + の異なるバージョンの動作が大きく異なるため、Linux (最新の gtk) で確実に開発し、Windows (修正バージョン) にデプロイできないという問題に遭遇しました。

バグは gtk+ で時間の経過とともに修正され、新しい機能が導入され、異なるバージョン間でピクセル単位の完全な再現を実際に期待することはできません。

于 2013-01-04T12:21:19.890 に答える