0

REPORT モードの wx.ListCtrl があり、画像リストを使用して、SetItemColumnImage で 50x50 ピクセルのアイコンを表示します。現在の問題は、アイコンの右側の列に表示するテキストの高さが 50 ピクセル未満であり、アイコンのテキストよりも高い部分が切り取られていることです。

行の高さをアイコンの高さに合わせて ListCtrl に指示する方法はありますか? 最後の手段はテキストのフォントサイズを変更することですが、もっと良い方法があるはずです。

アップデート:

これが私のコードの一部です:

self.list = util.ListCtrl(nb, style=wx.LC_REPORT|
                wx.LC_SINGLE_SEL|wx.LC_NO_HEADER|wx.LC_ALIGN_LEFT)
self.list.InsertColumn(0, 'Avatar', width=-1)
self.list.InsertColumn(1, 'Name', width=-1)
self.list.SetColumnWidth(0, 50)

self.imagelist = wx.ImageList(50, 50, 255, 20)
self.list.SetImageList(self.imagelist, wx.IMAGE_LIST_SMALL)

i = 0
for user in self.users:
    self.list.Append(['', user['name']])

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)
        self.list.SetItemColumnImage(i, 0, imageidx)

    i += 1

LC_REPORT フラグを削除すると、画像は完全に表示されますが、すべてが 1 行に表示され、名前は表示されなくなります。

4

2 に答える 2

1

画像が 50x50 であるため、もはや「小さい」という資格はないと思います。wx.IMAGE_LIST_SMALL の代わりに wx.IMAGE_LIST_NORMAL を使用してみてください。行の高さを手動で設定することについて何も見つからないので、それは不可能だと思います。ただし、wx2.9 で解決されたというこのトピックに関するバグ レポートを見つけました。2.9を使用していますか?

または、純粋な Python である UltimateListCtrl を使用することもできます。その機能がない場合は、作成者が非常に応答性が高いため、おそらくすぐにパッチを当てることができます。

于 2012-06-29T13:35:14.683 に答える
0

それを理解するために、コーヒーを数杯飲みました。

ImageList.Add の呼び出しは、ListCtrl が ImageList 内の画像の高さに応じて行の高さを変更するために、ListCtrl.Append (または ListCtrl.InsertItem) の前に行う必要があります。

だから代わりに

for user in self.users:
    self.list.Append(['', user['name']])

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)
        self.list.SetItemColumnImage(i, 0, imageidx)

あなたはこのようなもので行くべきです

for user in self.users:

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)

    self.list.Append(['', user['name']])

    if user['avatar']:
        self.list.SetItemColumnImage(i, 0, imageidx)

デフォルトのアバターを実装するまでは、見栄えが悪くなります。

def_avatar = 'default_avatar.jpg'

for user in self.users:

    bitmap = wx.BitmapFromImage(user['avatar'] if user['avatar'] else def_avatar)
    imageidx = self.imagelist.Add(bitmap)

    self.list.Append(['', user['name']])
    self.list.SetItemColumnImage(i, 0, imageidx)
于 2016-09-20T04:01:51.073 に答える