Найти - Пользователи
Полная версия: wx.ListCtrl да как же в этого мерзавца данные запихать?
Начало » GUI » wx.ListCtrl да как же в этого мерзавца данные запихать?
1
FoxPython
Требуется:
получить список jpg-файлов с картинками уменьшенными копиями каждого файла.

Получаю список (обычный питоновский) имён файлов, даже в словарь запихал соответствия картинок именам файлов.
И картинки Rescale'ем уменьшил. (правда, процесс этот небыстрый)

Как запихать данные в лист-контроль в таком виде:

ПЕРВАЯ КОЛОНКА ВТОРАЯ КОЛОНКА
трали-вали.jpg картинка-изображение
трюли-люли.jpg картинка-изображение
забодай-бодайло.jpg картинка-изображение


Перечитал все доки, залез в демо wx.Питона, залез в help(wx.ListCtrl) НИЧЕГО НЕ МОГУ ПОНЯТЬ!
Даже текстовую строчку не могу запихать в лист-контроль!
PooH
Ну согласен, для новичка в демке пример трудноват. Вот вам простой:
# -*- coding: cp1251 -*-
import wx, os, os.path
_IMAGE_DIR = './images'
class TestFrame(wx.Frame):
    
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Test", size=(500, 400))
        self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, u"ПЕРВАЯ КОЛОНКА")
        self.list.InsertColumn(1, u"ВТОРАЯ КОЛОНКА")
        self.il = wx.ImageList(16, 16)
        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
        for filename in os.listdir(_IMAGE_DIR):
            item = wx.ListItem()
            item.SetImage(-1)
            index = self.list.InsertItem(item)
            image_index = self.il.Add(wx.Image(os.path.join(_IMAGE_DIR, filename), wx.BITMAP_TYPE_PNG).ConvertToBitmap())
            self.list.SetStringItem(index, 0, filename)
            self.list.SetItemColumnImage(index, 1, image_index)
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(1, wx.LIST_AUTOSIZE)
        
if __name__ == '__main__':    
    app = wx.PySimpleApp()
    frame = TestFrame(None)
    frame.Show(True)
    app.MainLoop()
в директории ‘./images’ навалено файликов png размером 16х16. Пример отображает их в ListCtrl
FoxPython
Спасибо! Бум разбираться…

П.С. Зачем в Show() запихивать True?
Он и без него неплохо срабатывает.
PooH
FoxPython
П.С. Зачем в Show() запихивать True?
Он и без него неплохо срабатывает.
да собственно незачем :) я просто кусок из какого-то примера скопировал, так он и остался.
Show с параметром True - показывает окно, с false - прячет. Но по умолчанию параметр как раз True
FoxPython
Пардон, ещё вопросик: а можно ли вытащить из JPG-файла его уменьшенную копию, та, что для быстрого просмотра используется? А то если файлов много, да все ещё по 2-3 мегабайта (с моего фота), то Rescale заду-у-у-у-мается не на шутку.

Двойной пардон: так и не сумел ужать картинку так, чтобы она вписалась в определённый размер (допустим 200*200) и при этом сохранила бы свои пропорции (т.е. одной стороной полностью вписалась бы в указанный размер, а второй стороной - так, чтобы не попортить собственные пропорции). Есть такой метод? Или только собственноручно высчитывать на сколько уменьшать каждую из сторон картинки?
FoxPython
Сделал свой листконтроль указанным способом. Усё получилось. Всё замечательно, за одни маленьким но досадным исключением: какого-то лешего картинка jpg-файла лепится как во вторую колонку, где ей и положено быть, так и в ПЕРВУЮ, где ей быть не положено!
Т.е. вместо:
имя файла картинка

получилось
картинка, имя файла снова картинка

Что за ерундень? Что только не делал, никак не смог выкинуть картинку из первой колонки. Добился только того, что все картинки в первой колонке стали одинаковыми.
FoxPython
Помогите! (рыдающий смайл)
PooH
FoxPython
Помогите! (рыдающий смайл)
Ну честно скажу - не знаю. Я в примере ставил:
item.SetImage(-1)
но все равно в первой колонке остается пустое место под рисунок. имхо проще картинку поместить в первую колонку а подпись во вторую ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB