【问题标题】:How to set wxpython Grid top headers?如何设置 wxpython Grid 顶部标题?
【发布时间】:2013-09-17 08:54:30
【问题描述】:

当我使用 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()

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

如何做到这一点?

【问题讨论】:

    标签: python header grid wxpython


    【解决方案1】:

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

    列标题由命令设置

    SetColLabelValue(int col, const wxString& value)
    

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

    This tutorial 进一步表明,在您的案例中,完整的示例代码如下所示:

    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 对象将这些行添加到您的代码中(取自this post):

    # 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
    

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

    【讨论】:

    • 谢谢,您能否建议一种快速的方法来向每个列标题添加 10 年的日期(10x365= 3650 列,每天都有日期)?
    • This post 可以帮助你。我将要点添加为编辑。
    • 谢谢您的回答,先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2020-12-18
    • 2021-04-13
    • 1970-01-01
    • 2020-05-28
    • 2020-02-08
    • 1970-01-01
    相关资源
    最近更新 更多