Python 2.7 在pycharm中设置断点会更改代码的行为
这确实是一个Pycharm-IDE问题——python/wx bug已经修复 一个看似无害的更改破坏了下面的Python 2.7 在pycharm中设置断点会更改代码的行为,python-2.7,wxpython,pycharm,Python 2.7,Wxpython,Pycharm,这确实是一个Pycharm-IDE问题——python/wx bug已经修复 一个看似无害的更改破坏了下面的raceText.SetLabel()调用(它只是在静态文本控件中设置文本)。因此,我在item=self.items[itemDex]中设置了一个断点: def __init__(self): # ... self.raceText = staticText(self,u'') # see below for staticText definition def Evt
raceText.SetLabel()
调用(它只是在静态文本控件中设置文本)。因此,我在item=self.items[itemDex]
中设置了一个断点:
def __init__(self):
# ...
self.raceText = staticText(self,u'') # see below for staticText definition
def EvtListBox(self,event):
"""Responds to listbox selection."""
itemDex = event.GetSelection()
item = self.items[itemDex] # breakpoint here
face = self.data[item]
self.nameText.SetLabel(face.pcName)
self.raceText.SetLabel(face.getRaceName()) # this
瞧,self.raceText.SetLabel(face.getRaceName())现在成功了
那么这怎么可能呢?设置断点会触发什么
编辑:更多数据:
最初破坏SetLabel()调用的是以下提交:
-def staticText(parent,label=u'',pos=defPos,size=defSize,style=0,name=u"staticText",id=defId,):
+def staticText(parent, label=u'', pos=defPos, size=defSize, style=0,
+ noAutoResize=True, name=u"staticText"):
"""Static text element."""
- return wx.StaticText(parent,id,label,pos,size,style,name)
+ if noAutoResize: style |= wx.ST_NO_AUTORESIZE
+ return wx.StaticText(parent, defId, label, pos, size, style, name)
将noAutoResize default值翻转为False将消除错误-文本已设置,但wx.ST\u NO\u AUTORESIZE
将阻止控件从u''
调整其大小-因此不会显示任何文本。这是一只普通的老虫子
问题仍然是,在调试器self.raceText.SetLabel()中设置断点时,究竟为什么要显示文本
编辑:请阅读答案-健全性检查,我认为在调试器中运行可能只是隐藏或混淆了真正的问题
如果未设置wx.ST_NO_AUTORESIZE,则对标签的更改将导致调整小部件的大小,这通常会导致小部件通过来自系统的自动绘制事件很快重新绘制。当wx.ST_NO_AUTORESIZE被设置时,调整大小不会发生,因此特定的绘制事件不会发生,并且小部件可能不会重新绘制,直到下次刷新父对象或发生触发绘制事件的其他事件
因此,一个可能的解决方法是在每个SetLabel
之后添加对self.fooText.Refresh()
的调用。在调试器中停止时,显示仍不会更新,因为绘制事件通常在返回到活动事件循环之前不会发生,但在正常运行中,绘制事件将很快发生,用户不会注意到,除非有一些长期运行的事情阻止返回到事件循环。如果告诉PyCharm继续,UI是否正确更新?你在用什么操作系统?你有一个小的可运行的代码示例吗?@MikeDriscoll:是的,它正确地更新了ui,这就是问题所在-(,u'Breton')
是SetLabel调用的参数。没有一个小的可运行的例子对不起-下面是代码:也许我不理解。断点导致未调用self.raceText.SetLabel()
,对吗?断点在那一行之前,对吗?如果是这样,那么这就是应该发生的事情。断点到达时会暂停执行,以便您可以进行调试。@MikeDiskColl:否相反:当我运行调试器并没有设置断点时,UI没有正确更新。所以我放了一个断点,看看到底发生了什么,它碰到了断点,一切看起来都正常-我点击F8-执行继续,UI正确更新!如果不运行调试器而只是正常运行,会发生什么?这样行吗?如果是,,那么这听起来可能是PyCharm方面的一个bug。奇怪的是,paint事件是在调试器中触发的-但你的解释至少透露了一些信息-显然调试器中的hocus pocus在正常执行时触发了这样一个事件,而不是关闭编辑:现在我想这很小啊哈-是断点将焦点切换到IDE,然后返回到程序->绘制-rolfmao