4

当我用 wxpython 创建一个网格时,我得到顶部列标题为“A”、“B”、“C”......

import wx
import wx.grid as gridlib

########################################################################
class MyForm(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, parent=None, title="A Simple Grid")
        panel = wx.Panel(self)

        myGrid = gridlib.Grid(panel)
        myGrid.CreateGrid(12, 8)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(myGrid, 1, wx.EXPAND)
        panel.SetSizer(sizer)

if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

在此处输入图像描述

但我想设置自定义列标题:

在此处输入图像描述

这个怎么做?

4

1 回答 1

13

WxPython wiki告诉我们,每一行和每一列如何有它们的可设置标签(标题),它可以有什么文本和它自己的任何其他布局。

列标题由命令设置

SetColLabelValue(int col, const wxString& value)

它将列号和所需的标签值作为参数。

本教程进一步表明,您的案例中的完整示例代码将如下所示:

import wx
import wx.grid as gridlib

########################################################################
class MyForm(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, parent=None, title="A Simple Grid")
        panel = wx.Panel(self)

        myGrid = gridlib.Grid(panel)
        myGrid.CreateGrid(12, 8)
        myGrid.SetColLabelValue(0, "ID")
        myGrid.SetColLabelValue(1, "Name")
        myGrid.SetColLabelValue(2, "Lastname")
        myGrid.SetColLabelValue(3, "01-Jan-13")
        # etc. etc.


        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(myGrid, 1, wx.EXPAND)
        panel.SetSizer(sizer)

if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

当然,如果该日期是即时初始化的,那么您必须从一个datetime对象中获取它,例如将这些行添加到您的代码中(取自这篇文章):

# Add to imports
import datetime  

# fetch date and you can give this, not hard coded string value.
datetime.datetime.today()

要在您的标题上迭代年/次,请发现以下有用的内容:

from dateutil import rrule
from datetime import datetime, timedelta

now = datetime.now()
tenYearsLater = now + timedelta(years=10)

for dt in rrule.rrule(rrule.DAILY, dtstart=now, until=tenYearsLater):
    print dt

这里的代码源,而不是打印,对应地设置标签。此示例打印两个时间实例之间的每个日期。你需要dateutil在你的项目中。

于 2013-09-12T20:36:00.837 回答