Python论坛  - 讨论区

标题:[python-chinese] wxpython: 窗口刷新,屏蔽键盘事件,控件居中显示

2007年09月08日 星期六 11:33

wentrue(I'm Once) guozhuwen在gmail.com
星期六 九月 8 11:33:35 HKT 2007

½üÈÕÀ´ÓÃwxpythonдһ¸ö³ÌÐòʱÓöµ½Á˼¸¸öÖ÷ÒªµÄÎÊÌ⣬Çë½Ì¸÷λ´ïÈË¡£

ÎҵijÌÐòÊÇÒ»¸öFrame£¬ÉÏÃæ·ÅÁËÒ»¸öPanel£¬PanelÉÏ·ÅÁËÒ»¸öStaticBitmapºÍÁ½¸öStaticText¡£
³ÌÐòÁ÷³ÌÊǸù¾Ý¼üÅÌʼþ»òTimer¶ÔStaticBitmap¼°StaticTextÉϵÄͼƬºÍÎÄ×Ö½øÐÐÇл»£¬Ò»¸öÏÔʾʱ
ÆäËüµÄÒþ²Ø¡£

1¡¢´°¿ÚµÄˢУ¬ÎÒÓÃShow(True/False)·½·¨À´ÊµÏÖÒþ²ØÓëÏÔʾ£¬µ«Ê±²»Ê±»á³öÏÖµÄÎÊÌâÊÇÓüüÅÌ
½øÐпØÖÆʱÓÐʱ¸ÃÏÔʾʱ²»ÏÔʾ£¬ÓÐʱ¸ÃÒþ²Øʱ²»Òþ²Ø¡£Õâ¸öÎÊÌâºóÀ´ÎÒËãÊǽâ¾öÁË£¬ÓÃÁËUpdate()·½·¨£¬
¶ÔPanel½øÐÐˢУ¬ËäÈ»ÓÐʱҲ»á³öЩĪÃûÆäÃîµÄÎÊÌ⣬²»¹ý¸ã²»Çå³þÔ­Òò¡£

2¡¢ÔÚijһ¸ö´¦ÀíÖУ¬ÎÒÏ£ÍûÆÁ±Î¼üÅÌʼþ£¬ÎÒÊÔͼÓÃtime.sleep(2.0)À´ÊµÏÖ£¬½á¹û·¢ÏÖ½ø³ÌÔÚsleep¹ý³Ì
Ò²Äܲ¶»ñ¼üÅÌʼþ¡£²»ÖªµÀÓÐʲôº¯Êý¿ÉÒÔʵÏÖ£¿ÎÒÊÔÁËDisable()ºÍUnbind()¶¼¾õµÃ²»Íס£

3¡¢ÎÒÏ£Íû°ÑStaticBitmapºÍStaticText¶¼Ïà¶ÔPanelÀ´¾ÓÖÐÏÔʾ£¬µ«ÊÇÎÒ³¢ÊÔÓÃCenter£¬CenterOnParent
¶¼Ã»»ñµÃÐèÒªµÄЧ¹û¡£StaticTextµ¹ÊǾÓÖÐÁË£¨ÎÒÒ²²»ÖªµÀΪʲô£¬ÔÚÓÐЩ²âÊÔÀïÓÖ²»ÐУ©£¬StaticBitmap
ʼÖÕÎÞ·¨¾ÓÖУ¬ÄѵÀÖ»ÄÜͨ¹ý¼ÆËã´°ÌåÓë¿Ø¼þµÄ³¤¿íºÍλÖÃÀ´ÉèÖÃλÖÃÂð£¿
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070908/a9ab4f39/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月09日 星期日 22:45

马踏飞燕 honeyday.mj在gmail.com
星期日 九月 9 22:45:30 HKT 2007

> 1、窗口的刷新,我用Show(True/False)方法来实现隐藏与显示,但时不时会出现的问题是用键盘
> 进行控制时有时该显示时不显示,有时该隐藏时不隐藏。这个问题后来我算是解决了,用了Update()方法,
> 对Panel进行刷新,虽然有时也会出些莫名其妙的问题,不过搞不清楚原因。
>
用键盘的时候没有正确响应是因为你的键盘绑定的控件没有获得焦点,所以没有捕获到键盘的输入,也就没有响应了。
当然,对于你的这个问题很可能是StaticBitmap带来的副作用。
至于刷新时出现的问题,请详细描述。

> 2、在某一个处理中,我希望屏蔽键盘事件,我试图用time.sleep(2.0)来实现,结果发现进程在sleep过程
> 也能捕获键盘事件。不知道有什么函数可以实现?我试了Disable()和Unbind()都觉得不妥。
>

试试用计时器配合Freeze()和Thaw()能否实现。
当然也可以自己实现,在你的某一个处理过程中设置一个全局变量,然后在event
handler里面判断这个变量的值,如果判断出不要捕获事件的话,就直接写上event.Skip()就好了。

> 3、我希望把StaticBitmap和StaticText都相对Panel来居中显示,但是我尝试用Center,CenterOnParent
> 都没获得需要的效果。StaticText倒是居中了(我也不知道为什么,在有些测试里又不行),StaticBitmap
> 始终无法居中,难道只能通过计算窗体与控件的长宽和位置来设置位置吗?
>
StaticBitmap控件对于动态改变内容并重画的时候确实有问题,变到左上角了。我的解决办法就是不用,呵呵。
直接用PaintDC在panel的client区域draw出来就好了。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月10日 星期一 22:29

ye jun dionysus1016在gmail.com
星期一 九月 10 22:29:46 HKT 2007

event.skip()不错
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070910/a57a6606/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月12日 星期三 10:38

wentrue(I'm Once) guozhuwen在gmail.com
星期三 九月 12 10:38:37 HKT 2007

ÔÚ07-9-9£¬Âí̤·ÉÑà <honeyday.mj在gmail.com> дµÀ£º
>
> > 1¡¢´°¿ÚµÄˢУ¬ÎÒÓÃShow(True/False)·½·¨À´ÊµÏÖÒþ²ØÓëÏÔʾ£¬µ«Ê±²»Ê±»á³öÏÖµÄÎÊÌâÊÇÓüüÅÌ
> > ½øÐпØÖÆʱÓÐʱ¸ÃÏÔʾʱ²»ÏÔʾ£¬ÓÐʱ¸ÃÒþ²Øʱ²»Òþ²Ø¡£Õâ¸öÎÊÌâºóÀ´ÎÒËãÊǽâ¾öÁË£¬ÓÃÁËUpdate()·½·¨£¬
> > ¶ÔPanel½øÐÐˢУ¬ËäÈ»ÓÐʱҲ»á³öЩĪÃûÆäÃîµÄÎÊÌ⣬²»¹ý¸ã²»Çå³þÔ­Òò¡£
> >
> ÓüüÅ̵ÄʱºòûÓÐÕýÈ·ÏìÓ¦ÊÇÒòΪÄãµÄ¼üÅ̰󶨵ĿؼþûÓлñµÃ½¹µã£¬ËùÒÔûÓⶻñµ½¼üÅ̵ÄÊäÈ룬Ҳ¾ÍûÓÐÏìÓ¦ÁË¡£
> µ±È»£¬¶ÔÓÚÄãµÄÕâ¸öÎÊÌâºÜ¿ÉÄÜÊÇStaticBitmap´øÀ´µÄ¸±×÷Óá£
> ÖÁÓÚË¢ÐÂʱ³öÏÖµÄÎÊÌ⣬ÇëÏêϸÃèÊö¡£
>
> > 2¡¢ÔÚijһ¸ö´¦ÀíÖУ¬ÎÒÏ£ÍûÆÁ±Î¼üÅÌʼþ£¬ÎÒÊÔͼÓÃtime.sleep(2.0)À´ÊµÏÖ£¬½á¹û·¢ÏÖ½ø³ÌÔÚsleep¹ý³Ì
> > Ò²Äܲ¶»ñ¼üÅÌʼþ¡£²»ÖªµÀÓÐʲôº¯Êý¿ÉÒÔʵÏÖ£¿ÎÒÊÔÁËDisable()ºÍUnbind()¶¼¾õµÃ²»Íס£
> >
>
> ÊÔÊÔÓüÆʱÆ÷ÅäºÏFreeze()ºÍThaw()ÄÜ·ñʵÏÖ¡£
> µ±È»Ò²¿ÉÒÔ×Ô¼ºÊµÏÖ£¬ÔÚÄãµÄijһ¸ö´¦Àí¹ý³ÌÖÐÉèÖÃÒ»¸öÈ«¾Ö±äÁ¿£¬È»ºóÔÚevent
> handlerÀïÃæÅжÏÕâ¸ö±äÁ¿µÄÖµ£¬Èç¹ûÅжϳö²»Òª²¶»ñʼþµÄ»°£¬¾ÍÖ±½ÓдÉÏevent.Skip()¾ÍºÃÁË¡£


ʹÓÃÁËÒ»¸öÈ«¾Ö±äÁ¿£¬¿ØÖÆÁ˼üÅÌʼþµÄÏìÓ¦

> 3¡¢ÎÒÏ£Íû°ÑStaticBitmapºÍStaticText¶¼Ïà¶ÔPanelÀ´¾ÓÖÐÏÔʾ£¬µ«ÊÇÎÒ³¢ÊÔÓÃCenter£¬CenterOnParent
> > ¶¼Ã»»ñµÃÐèÒªµÄЧ¹û¡£StaticTextµ¹ÊǾÓÖÐÁË£¨ÎÒÒ²²»ÖªµÀΪʲô£¬ÔÚÓÐЩ²âÊÔÀïÓÖ²»ÐУ©£¬StaticBitmap
> > ʼÖÕÎÞ·¨¾ÓÖУ¬ÄѵÀÖ»ÄÜͨ¹ý¼ÆËã´°ÌåÓë¿Ø¼þµÄ³¤¿íºÍλÖÃÀ´ÉèÖÃλÖÃÂð£¿
> >
> StaticBitmap¿Ø¼þ¶ÔÓÚ¶¯Ì¬¸Ä±äÄÚÈݲ¢ÖØ»­µÄʱºòȷʵÓÐÎÊÌ⣬±äµ½×óÉϽÇÁË¡£ÎҵĽâ¾ö°ì·¨¾ÍÊDz»Ó㬺Ǻǡ£
> Ö±½ÓÓÃPaintDCÔÚpanelµÄclientÇøÓòdraw³öÀ´¾ÍºÃÁË¡£


ллָµã£¬ÎÒÏÖÔÚ²ÉÓÃÁËÄãËù½²µÄ·½·¨¡£ÏÖÔÚÎÒËùÓб仯µÄÎÄ×ÖºÍͼƬ¶¼ÓÃPaintDCÔÚÏìÓ¦EVT_PAINTʼþµÄOnPaintº¯ÊýÖл­³öÀ´¡£
ÔÚÐèÒªµÄʱºòÓÃself.Refresh()µ÷ÓÃOnPaintÖØ»­¡£
µ«ÏÖÔÚÅöµ½Ò»¸öÎÊÌ⣬´úÂëÈçÏ£º
def OnKeyUp(self):              ----------------EVT_KEY_UPµÄÏìÓ¦º¯Êý
    .........
    self.Refresh()
    time.sleep(1.5)
    .........
Õâ¸öº¯ÊýÏÈ·µ»ØÔÙˢС£


def OnTimer(self):            ------------------TimerʼþµÄµ÷Óú¯Êý
    ..........
    self.Refresh()
    time.sleep(1.5)
    .............
Õâ¸öº¯ÊýÏÈË¢ÐÂÔÙ¼ÌÐøÖ´ÐÐÏÂÃæµÄ´úÂë¡£

ÎÒÏ£ÍûµÃµ½µÄÊǺ¯Êý2µÄЧ¹û£¬¼´Åöµ½Ë¢Ð¾ÍÏÈË¢ÐÂÔÙÖ´ÐÐÒÔÏ´úÂ룬¶ø²»ÊÇÏñº¯Êý1ÄÇÑùµÈ´ý·µ»ØÔÙˢС£
ÎÒ²»ÖªµÀÔõÑùÄÜʵÏÖÈçOnTimerÄÇÑùµÄЧ¹û£¿
ÄѵÀÓÖµÃÔÚOnKeyUpÖÐÔÙ´´½¨Ò»¸öTimerÁË~

_______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
Guozhu Wen
guozhuwen在gmail.com
Tel. 086-0551-5591108
Fax. 086-0551-5592751
Department of Automation,
University of Science and Technology of China
and
Institute of Intelligent Machines, Chinese Academy of Sciences
P.O. Box 1130, Hefei, Anhui 230031, China
Our lab web page:
http://www.intelengine.cn
My homepage:
http://home.ustc.edu.cn/~wentrue/resume.html
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070912/7c723ccb/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号