这真的是一个Pycharm - IDE问题 - python / wx错误已修复。
一个看似无害的变化打破了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默认值翻转为False压缩错误 - 文本已设置但wx.ST_NO_AUTORESIZE
会阻止控件从u''
调整其大小 - 因此未显示任何文本。所以这是一个普通的老虫。
问题仍然是为什么在调试器self.raceText.SetLabel()
中设置断点时显示文本?
编辑:请阅读答案 - 完整性检查
答案 0 :(得分:0)
IIUC,我认为在调试器中运行只是隐藏或混淆真正的问题。
当wx.ST_NO_AUTORESIZE 未设置时,对标签的更改将导致调整窗口小部件的大小,这通常会导致窗口小部件很快通过自动绘制事件重新绘制来自系统。当wx.ST_NO_AUTORESIZE 设置时,调整大小不会发生,因此特定的绘制事件不会发生,并且在下次刷新父节点之前,小部件可能不会重新绘制或发生触发油漆事件的其他事情。
因此,可能的解决方法是在每个self.fooText.Refresh()
之后添加对SetLabel
的调用。在调试器中停止时,显示仍然不会更新,因为绘制事件通常不会发生,直到返回到活动事件循环,但在正常运行中,它将很快发生,用户将不会注意到,除非有一些长时间运行的东西阻止了返回事件循环。