Рубрики
Без рубрики

WXPYPHON: введение в ULTimatelistCtrl

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Один из новых виджетов AGW, который будет включен в WXPYPHON, называется ULTIMATELISTCTRL. Это чистый виджет Python, который может иметь в значительной степени любой другой виджет, застреванный в любую из клеток, что делает его действительно гибким. Он также позволяет опытному программисту способности добавлять пользовательские рендереры, чтобы сделать интерфейс другой. В этой статье мы возьмем быстрый взгляд на этот увлекательный виджет.

Начиная

Самый простой способ выучить новый виджет – это посмотреть на пример. Вы можете посмотреть на DXPYPHON DEMO для серии 2.9, если вы хотите увидеть несколько сложных демонстрационных демонстраций этого удивительного виджета, но для наших целей мы собираемся создать разделующую версию, которая основана на одном из этих демонстраций, а именно отчет Просмотр версии. Вот код для вашего удовольствия просмотра:

import wx
from wx.lib.agw import ultimatelistctrl as ULC

########################################################################
class TestPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        
        try:
            font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
            boldfont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
        except AttributeError:
            # wxPython 4 / Phoenix updated SystemSettings
            font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
            boldfont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)

        boldfont.SetWeight(wx.BOLD)
        boldfont.SetPointSize(12)
        
        self.ultimateList = ULC.UltimateListCtrl(self, agwStyle = wx.LC_REPORT 
                                         | wx.LC_VRULES
                                         | wx.LC_HRULES)
        
        info = ULC.UltimateListItem()
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_CHECK
        info._image = []
        info._format = 0
        info._kind = 1
        info._text = "Artist Name"
        self.ultimateList.InsertColumnInfo(0, info)
    
        info = ULC.UltimateListItem()
        info._format = wx.LIST_FORMAT_RIGHT
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT
        info._image = []
        info._text = "Title"
        info._font = boldfont
        self.ultimateList.InsertColumnInfo(1, info)
        
        info = ULC.UltimateListItem()
        info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT
        info._format = 0
        info._text = "Genre"
        info._font = font
        info._image = []
        self.ultimateList.InsertColumnInfo(2, info)
        
        self.ultimateList.InsertStringItem(0, "Newsboys")
        self.ultimateList.SetStringItem(0, 1, "Go")
        self.ultimateList.SetStringItem(0, 2, "Rock")
        
        self.ultimateList.InsertStringItem(1, "Puffy")
        self.ultimateList.SetStringItem(1, 1, "Bring It!")
        self.ultimateList.SetStringItem(1, 2, "Pop")
        
        self.ultimateList.InsertStringItem(2, "Family Force 5")
        self.ultimateList.SetStringItem(2, 1, "III")
        self.ultimateList.SetStringItem(2, 2, "Crunk")
        
        self.ultimateList.SetColumnWidth(0, 150)
        self.ultimateList.SetColumnWidth(1, 200)
        self.ultimateList.SetColumnWidth(2, 100)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.ultimateList, 1, wx.EXPAND)
        self.SetSizer(sizer)
        
########################################################################
class TestFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="MvP UltimateListCtrl Demo")
        panel = TestPanel(self)
        self.Show()
    
#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = TestFrame()
    app.MainLoop()
    

Давайте займем несколько моментов, чтобы немного сломать это. Во-первых, чтобы импортировать этот виджет, нам нужно сделать что-то вроде следующего: от wx.lib.agw Импорт Ultimatelistctrl как ULC Отказ Тогда, чтобы мгновенное, мы называем Ulc.ultimatelistctrl () и пропустите его несколько ключевых ценностей. В этом случае мы проходим в родительском и трех стилях: WX.LC_REPORT, WX.LC_VRULES и WX.LC_HRULES. Первый AGWStyle – LC_REPORT, который помещает виджет в режим «Отчет», вероятно, самый распространенный режим, который вы увидите для listCtrl и одного из самых полезных. Другие два стиля ставят вертикальные и горизонтальные линии, соответственно.

Далее мы хотим создать нашими колоннами. Мы используем Ulc.ultimatelistitem сделать это, хотя в соответствии с Документация Это также может быть использовано для создания «предметов» тоже. Как видите, у ULTIMATELISTITEM имеет много атрибутов, которые мы можем установить. Вы можете добавить изображение, флажок (через маску и стиль: ulc.ulc_mask_check), добрый (0 – нормальный, 1 – флажок, 2 – переключатель), формат (который контролирует позиционирование метки), шрифтом и текст и несколько других. После того, как вы установите этот накладки, вы называете объект UltimatelistiteM INSERTCOLUMNINFO () Метод на нем, чтобы применить ваши настройки.

Наконец, добавить данные в ULTIMATELISTCTRL, мы делаем то же самое, что мы сделаем с обычным listctrl. А именно, мы впервые звоним INSERTSTRINGITEM (индекс, метка) Где индекс – номер строки. Затем добавить строки на другие столбцы, вы захотите позвонить SetStringiteM (индекс, COL, метка) Отказ Есть много других методов, которые вы можете позвонить, чтобы добавить другие типы данных, но вам нужно будет прочитать источник демонстрации или документацию, чтобы узнать это. И теперь мы закончили с нашей первой демонстрацией!

Обертывание

Есть гораздо большая информация, которую можно найти в официальном демонстрационной серии Wxpython 2.9. На самом деле, существует несколько демонстраций, показывающих различные вариации стилей и интерфейсов пользовательских интерфейсов, которые этот виджет может сделать. Вы можете увидеть пример одного из этих демонстрантов на скриншоте в начале этой статьи. Я бы порекомендовал этот виджет в любое время, необходимое для вставки других виджетов в ячейки listctrl или всякий раз, когда вам нужно много контроля над презентацией виджета. Счастливого взлома!

Дальнейшее чтение