Python 2.7 在pycharm中设置断点会更改代码的行为

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

这确实是一个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 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