`
dqifa
  • 浏览: 115948 次
社区版块
存档分类
最新评论

在wxGrid中增加wxDataPickerCtrl控件

阅读更多

编写环境:

1、ActivePython-2.7.2.5-win32-x86

2、wxPython2.8-win32-unicode-2.8.12.1-py27

3、wxFormBuilder_v3.3.3-beta

 

以下代码是演示如何在wxGrid中增加wxDataPickerCtrl控件的代码,是我查了好久才找到的。

import wx 
import wx.grid 

class DatePickerCellEditor(wx.grid.PyGridCellEditor): 
    def __init__(self): 
        wx.grid.PyGridCellEditor.__init__(self) 

    def Create(self, parent, id, evtHandler): 
        """ 
        Called to create the control, which must derive from wx.Control. 
        *Must Override* 
        """ 
        self._tc = wx.DatePickerCtrl(parent, id, size=(120,-1), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) 
        self.SetControl(self._tc) 

        if evtHandler: 
            self._tc.PushEventHandler(evtHandler) 


    def SetSize(self, rect): 
        """ 
        Called to position/size the edit control within the cell rectangle. 
        If you don't fill the cell (the rect) then be sure to override 
        PaintBackground and do something meaningful there. 
        """ 
        self._tc.SetDimensions(rect.x, rect.y, rect.width+2, rect.height+2, wx.SIZE_ALLOW_MINUS_ONE) 

    def BeginEdit(self, row, col, grid): 
        """ 
        Fetch the value from the table and prepare the edit control 
        to begin editing.  Set the focus to the edit control. 
        *Must Override* 
        """ 
        s = grid.GetTable().GetValue(row, col) 
        d = wx.DateTime.Now() 
        try: 
            d.SetDay(int(s[:2])) 
            d.SetMonth(int(s[2:4])-1) 
            d.SetYear(int(s[4:8])) 
            self._tc.SetValue(d) 
        except: 
            pass 
        self.startValue = s 
        print self.startValue 
        #print 'self.startValue', self.startValue, type(self.startValue) 
        self._tc.SetValue(d) 
        #self._tc.SetInsertionPointEnd() 
        self._tc.SetFocus() 
        #self._tc.SetSelection(0, self._tc.GetLastPosition()) 

    def EndEdit(self, row, col, grid): 
        """ 
        Complete the editing of the current cell. Returns True if the value 
        has changed.  If necessary, the control may be destroyed. 
        *Must Override* 
        """ 
        changed = False 

        #val = str(self._tc.GetValue()) 
        d = self._tc.GetValue() 
        print 'd', d 
        month = d.GetMonth() 
        month = month+1 
        month = str(month) 
        if len(month)<2: 
            month = '0'+month 
        #val = str(d.GetDay()) + '-'+month + '-'+str(d.GetYear())
        val = str(d.GetYear()) + '-' + month + '-' + str(d.GetDay()) 
        print 'val, self.startValue',val, self.startValue 
        if val != self.startValue: 
            changed = True 
            grid.GetTable().SetValue(row, col, val) # update the table 

        self.startValue = '' 
        #self._tc.SetValue('') 
        return changed 

    def Reset(self): 
        """ 
        Reset the value in the control back to its starting value. 
        *Must Override* 
        """ 
        self._tc.SetValue(self.startValue) 
        #self._tc.SetInsertionPointEnd() 

    def Clone(self): 
        """ 
        Create a new object which is the copy of this one 
        *Must Override* 
        """ 
        return DatePickerCellEditor() 

class TestFrame(wx.Frame): 
    def __init__(self): 
        wx.Frame.__init__(self, None, title="Grid Editor", 
                          size=(640,480)) 

        grid = wx.grid.Grid(self) 
        grid.CreateGrid(50,50) 
        grid.SetDefaultEditor(DatePickerCellEditor()) 


app = wx.PySimpleApp() 
frame = TestFrame() 
frame.Show() 
app.MainLoop() 

 

分享到:
评论

相关推荐

    在VE中增加自定义控件

    讲述如何在eclipse的Visual Editor中增加自定义控件到面板上以便可以在编程时拖到窗口中。 语言:英语

    LABVIEW中动态添加控件

    1. **VI引用**:在LabVIEW中,动态添加控件需要用到VI引用。VI引用可以获取到运行时的VI实例,使我们能够对运行中的VI进行操作,如添加控件。 2. **创建控件**:LabVIEW提供了多种类型的控件,如按钮、数值显示、...

    C# DataGridView单元格中动态添加多个控件

    在C#编程中,`DataGridView`控件是一个非常常用的数据展示工具,特别是在Windows Forms应用程序中。它允许我们以表格形式展示数据,并提供了丰富的交互功能。然而,有时我们需要更灵活的界面设计,比如在某些单元格...

    C#在panel动态添加控件

    本示例关注的是如何在C#中使用ASP.NET Web应用程序,在一个Panel控件上动态添加控件。这个过程对于创建可自定义、灵活且交互性强的用户界面非常有用。 首先,我们需要理解Panel控件。Panel在ASP.NET中是一个容器...

    海康威视OCX控件,支持Wincc平台下在ActiveX中添加该控件。

    海康威视OCX控件是一款专为Wincc平台设计的组件,用于在ActiveX环境中集成和操作海康威视的设备,如监控摄像头、NVR等。此控件允许开发者在Wincc项目中直接控制和展示海康威视设备的视频流和其他相关功能,大大简化...

    wps中excel日期控件下载

    在WPS Office的Excel应用中,日期控件是一种非常实用的功能,它允许用户在工作表中插入一个可交互的日历小部件,以便于选择和输入日期。标题“wps中excel日期控件下载”提示我们要关注如何在WPS Excel中获取和安装这...

    powerBuilder中创建控件

    powerBuilder中创建控件,参考文章

    C#自定义控件库

    自定义控件是软件开发中的一个重要环节,特别是在UI设计和用户体验优化上。 自定义控件的创建通常涉及以下几个关键知识点: 1. **继承与派生**:在C#中,自定义控件通常是通过继承已有的系统控件(如Button、Label...

    在VC中使用picture控件显示图片

    在VC++(Visual C++)开发环境中,使用Picture控件来显示图片是一项常见的任务,尤其在创建GUI(图形用户界面)应用时。Picture控件是一个可视化组件,它允许程序员将图像嵌入到应用程序中,为用户提供直观的视觉...

    datagridview单元格增加日期控件.rar

    在.NET框架中,DataGridView是一种常用的控件,用于展示表格数据,它允许用户浏览、编辑和操作数据。在某些情况下,我们可能需要在DataGridView的单元格中添加特定类型的控件,如日期选择器,以增强用户体验并确保...

    在mfc中picture控件中显示Mat图片

    将opencv中的Mat格式的图片显示在mfc中的picture控件上,该程序已经被放在了一个函数中间,只需调用该函数ShowMatImgToWnd(CWnd* pWnd, cv::Mat img)就可以将所需的图片显示在picture控件上了,其中CWnd* pWnd参数中...

    DTPicker控件

    在VB的工具箱(Toolbox)中,你可以找到DTPicker控件,如果没有,可以通过右键点击工具箱并选择"选择项"(Components),然后在弹出的对话框中找到"Microsoft Date and Time Picker Control"并勾选它。之后,控件就...

    C# 控件拷贝

    在C#编程中,控件拷贝和复制是常见的需求,特别是在开发动态用户界面时。本文将深入探讨C#中如何实现控件的拷贝和复制,并提供一个示例程序来帮助理解这一过程。 首先,我们需要了解控件(Control)在C#中的基本...

    C# ListView中添加多种自定义控件源码

    在C#编程中,ListView控件是Windows Forms和WPF应用程序中常见的用于显示列表数据的组件。它提供了灵活的方式来展示信息,包括图标、文本、多列等。然而,ListView控件的标准功能有时不能满足所有需求,这时我们可能...

    Qt 使用QPainter类在子控件上画图

    然而,在实际开发过程中,有时我们可能会遇到在子控件上使用QPainter画图时出现问题,尤其是在有事件过滤器(event filter)存在的情况下。这是因为事件过滤器会拦截并处理子控件的事件,可能会影响到正常画图的操作...

    c#实现圆形按钮控件

    在C#编程中,创建一个圆形按钮控件可以极大地提升应用程序的界面美观度和用户体验。以下将详细讲解如何实现这个功能,以及相关的知识点。 首先,我们需要理解C#中的控件和自定义控件的概念。控件是用户界面的基本...

    c# 动态改变控件位置、控件大小、拖动控件

    在C#编程中,动态改变控件的位置、大小以及实现拖动功能是常见的需求,尤其在设计用户界面(UI)时。以下将详细介绍如何通过C#实现这些功能,并结合提供的"Panel"控件来举例说明。 1. **控件位置的动态改变**: 在...

    C# ListView中添加ComboBox等控件

    在C#编程中,ListView控件是Windows Forms和WPF应用程序中常见的用于显示列表数据的组件。它提供了灵活的方式来展示信息,例如图标、文本、多列等。然而,ListView默认的功能可能不足以满足所有需求,因此有时我们...

    C# Winform遍历控件(窗体、Panel的子控件)Controls

    在本示例中,我们同样使用了`foreach`循环来遍历Panel中的所有子控件,并根据控件的类型执行不同的操作。如果控件是Button,则根据控件名称分别改变其文字颜色;如果是TextBox,则根据控件名称分别更改其名称或清空...

    WPF资源字典中的控件事件触发

    在WPF(Windows Presentation Foundation)开发中,资源字典是一个非常重要的工具,它允许开发者将常用的样式、模板、控件等资源集中管理,方便复用和维护。然而,当我们在资源字典中定义了控件并希望对其进行事件...

Global site tag (gtag.js) - Google Analytics