WxPython。 ListCtrl。插入按钮-Python

时间:2018-07-18 11:42:30

标签: python wxpython

1)可以以某种方式在对象wx.ListCtrl的特定列的每一行中插入按钮吗? 2)为什么只能在第一列中编辑字符串的值?初始化wx.ListCtrl:

self.m_listCtrl_number = wx.ListCtrl(self.panel, wx.ID_ANY, wx.DefaultPosition, (450, 80),
                                             wx.LC_REPORT | wx.BORDER_SUNKEN | wx.LC_EDIT_LABELS | wx.LC_SINGLE_SEL)
self.bsizer_textCtrl.Add(self.m_listCtrl_number, 0, wx.ALL, 5)
self.m_listCtrl_number.InsertColumn(0, 'Min', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE)
self.m_listCtrl_number.InsertColumn(1, 'Max', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE)
self.m_listCtrl_number.InsertColumn(2, 'Fill', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE_USEHEADER)

添加项目:

self.m_listCtrl_number.InsertItem(self.index_numer, '0')
self.m_listCtrl_number.SetItem(self.index_numer, 1, '1')
self.m_listCtrl_number.SetItem(self.index_numer, 2, 'qwerty') # fixme Button!!!
self.index_numer += 1

1 个答案:

答案 0 :(得分:0)

您将不得不使用ultimatelistctrl
这是其中一个演示程序的黑客版本:

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

class TestPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        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.ulc = ULC.UltimateListCtrl(self, agwStyle = wx.LC_REPORT
                                         | wx.LC_VRULES
                                         | wx.LC_HRULES
                                         | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)

        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.ulc.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.ulc.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.ulc.InsertColumnInfo(2, info)

        self.button1 = wx.Button(self.ulc, -1, "Button1")
        self.button2 = wx.Button(self.ulc, -1, "Button2")
        self.button3 = wx.Button(self.ulc, -1, "Button3")
        index = self.ulc.InsertStringItem(3, " ")
        self.ulc.SetItemWindow(index, 0, self.button1)
        self.ulc.SetItemWindow(index, 1, self.button2)
        self.ulc.SetItemWindow(index, 2, self.button3)

        self.Bind(wx.EVT_BUTTON, self.OnButton)

        self.ulc.InsertStringItem(0, "Newsboys")
        self.ulc.SetStringItem(0, 1, "Go")
        self.ulc.SetStringItem(0, 2, "Rock")

        self.ulc.InsertStringItem(1, "Puffy")
        self.ulc.SetStringItem(1, 1, "Bring It!")
        self.ulc.SetStringItem(1, 2, "Pop")

        self.ulc.InsertStringItem(2, "Family Force 5")
        self.ulc.SetStringItem(2, 1, "III")
        self.ulc.SetStringItem(2, 2, "Crunk")

        self.ulc.SetColumnWidth(0, 150)
        self.ulc.SetColumnWidth(1, 200)
        self.ulc.SetColumnWidth(2, 100)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.ulc, 1, wx.EXPAND)
        self.SetSizer(sizer)

    def OnButton(self,event):
        b= event.GetEventObject()
        print(b.GetLabel(),"pressed")

########################################################################
class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="MvP UltimateListCtrl Demo")
        panel = TestPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App()
    frame = TestFrame()
    app.MainLoop()

enter image description here