Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » wx.ListCtrl да как же в этого мерзавца данные запихать? [RSS Feed]

#1 Дек. 14, 2007 08:16:53

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

Требуется:
получить список jpg-файлов с картинками уменьшенными копиями каждого файла.

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

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

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


Перечитал все доки, залез в демо wx.Питона, залез в help(wx.ListCtrl) НИЧЕГО НЕ МОГУ ПОНЯТЬ!
Даже текстовую строчку не могу запихать в лист-контроль!



Офлайн

#2 Дек. 14, 2007 10:56:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

Ну согласен, для новичка в демке пример трудноват. Вот вам простой:

# -*- 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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Дек. 14, 2007 11:03:52)

Офлайн

#3 Дек. 15, 2007 17:36:14

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

Спасибо! Бум разбираться…

П.С. Зачем в Show() запихивать True?
Он и без него неплохо срабатывает.



Отредактировано (Дек. 15, 2007 17:37:36)

Офлайн

#4 Дек. 15, 2007 17:51:13

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

FoxPython
П.С. Зачем в Show() запихивать True?
Он и без него неплохо срабатывает.
да собственно незачем :) я просто кусок из какого-то примера скопировал, так он и остался.
Show с параметром True - показывает окно, с false - прячет. Но по умолчанию параметр как раз True



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Дек. 15, 2007 19:15:04

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

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

Двойной пардон: так и не сумел ужать картинку так, чтобы она вписалась в определённый размер (допустим 200*200) и при этом сохранила бы свои пропорции (т.е. одной стороной полностью вписалась бы в указанный размер, а второй стороной - так, чтобы не попортить собственные пропорции). Есть такой метод? Или только собственноручно высчитывать на сколько уменьшать каждую из сторон картинки?



Офлайн

#6 Дек. 16, 2007 17:37:08

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

Сделал свой листконтроль указанным способом. Усё получилось. Всё замечательно, за одни маленьким но досадным исключением: какого-то лешего картинка jpg-файла лепится как во вторую колонку, где ей и положено быть, так и в ПЕРВУЮ, где ей быть не положено!
Т.е. вместо:
имя файла картинка

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

Что за ерундень? Что только не делал, никак не смог выкинуть картинку из первой колонки. Добился только того, что все картинки в первой колонке стали одинаковыми.



Офлайн

#7 Дек. 17, 2007 13:50:21

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

Помогите! (рыдающий смайл)



Офлайн

#8 Дек. 18, 2007 06:07:54

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.ListCtrl да как же в этого мерзавца данные запихать?

FoxPython
Помогите! (рыдающий смайл)
Ну честно скажу - не знаю. Я в примере ставил:
item.SetImage(-1)
но все равно в первой колонке остается пустое место под рисунок. имхо проще картинку поместить в первую колонку а подпись во вторую ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

  • Начало
  • » GUI
  • » wx.ListCtrl да как же в этого мерзавца данные запихать?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version