我在wxPython中遇到了一个非常奇怪的问题,我认为这是一个bug。基本上我有一个TextCtrl,当我按下Ctrl键时会改变背景颜色(不要问为什么)。然后我有另一个按钮,在BoxSizer上调用sizer.Layout(),其中存储了TextCtrl。当我这样做时,TextCtrl消失(达到零宽度)。只有在TextCtrl中有足够的文本时才会发生这种情况,并且只有按ctrl +(其他键)才会发生。这是代码:
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.frame = parent
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.btn = wx.Button(self, label="TextCtrl disappears?")
self.btn.Bind(wx.EVT_BUTTON, self.onClick)
self.txt=wx.TextCtrl(self,value="bunch of text goes here")
self.txt.Bind(wx.EVT_KEY_DOWN, self.onType)
self.sizer.Add(self.txt,0,wx.CENTER|wx.ALL,5)
self.sizer.Add(self.btn,0,wx.CENTER|wx.ALL,5)
self.SetSizer(self.sizer)
self.Fit()
def onType(self,event):
if event.GetKeyCode()==308:
self.txt.SetBackgroundColour((100,255,255,255))
else:
event.Skip()
def onClick(self,event):
self.sizer.Layout()
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="")
panel = MyPanel(self)
self.Fit()
self.Show()
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
现在,尝试转到TextCtrl并按下例如ctrl + a,然后按按钮。这是一个错误吗?更重要的是,解决方法是什么?我猜TextCtrl在Layout()下更改了一个指定其大小或行为的属性,但我无法确定哪一个被更改。
编辑:
我使用的是ubuntu 16.04,Python 2.7.12和wxpython 3.0.2.0版。
答案 0 :(得分:0)
无论是什么,它已经在wxpython 4中得到了解决 如何避免这个问题。
给TextCtrl
size=(n,n)
值
和/或
添加到sizer时,将wx.CENTER
替换为wx.EXPAND
。
即。
self.txt=wx.TextCtrl(self,-1,value="bunch of text goes here",size=(50,20))
self.sizer.Add(self.txt,0,wx.EXPAND|wx.ALL,5)
最后,键盘上肯定存在一些奇怪的事情,因为使用EVT_KEY_DOWN
而不是EVT_KEY_UP
不会发生这种情况。我不认为EVT_KEY_DOWN
通常会看到一个Ctrl键。见https://www.wxpython.org/Phoenix/docs/html/wx.KeyEvent.html