寻找改变 wx.lib.masked.TimeCtrl 实例宽度的方法(windows 上的 wxPython)

Looking for a way to change width of wx.lib.masked.TimeCtrl instances (wxPython on windows)

好的,问题来了:

如您所见,在 wx.lib.masked.TimeCtrl 实例中编辑秒时,小时段将被部分阻止。但是用size参数和SetSize方法都不能改变宽度,只能改变高度,不能解决问题。

我查了一下源码,好像TimeCtrl是对BaseMaskedTextCtrl的继承,是对wx.TextCtrl和[=的多重继承20=],基本上如果在创建新的 TimeCtrl 实例时给出 size

# allow for explicit size specification:
if size != wx.DefaultSize:
    # override (and remove) "autofit" autoformat code in standard time formats:
    maskededit_kwargs['formatcodes'] = 'T!'

但实际上 maskededit_kwargs['formatcodes'] = 'T!' 只是告诉 MaskedEditMixin:1) 这是一种时间格式; 2) 根据这些行强制显示的所有字符为大写:

self._forceupper  = '!' in self._formatcodes
......
self._isTime     = 'T' in self._ctrl_constraints._formatcodes and _isTimeType(mask)

所以基本上声称允许明确尺寸规格的代码对此没有做任何事情,我有点迷路了,四处寻找负责改变宽度的部分,任何人都知道该怎么做是吗?

P.S.: wxPython 3.0.2.0 on windows 7 64bit

找到解决方案!

BaseMaskedTextCtrl中实际上有一个SetFont方法:

def SetFont(self, *args, **kwargs):
        """ Set the font, then recalculate control size, if appropriate. """
        wx.TextCtrl.SetFont(self, *args, **kwargs)
        if self._autofit:
##            dbg('calculated size:', self._CalcSize())            
            self.SetClientSize(self._CalcSize())
            width = self.GetSize().width
            height = self.GetBestSize().height
##            dbg('setting client size to:', (width, height))
            self.SetInitialSize((width, height))

如您所见,SetInitialSize 可用于设置宽度和高度。

挺方便的。