文本控制在更改颜色和调用大小器后消失.布局



我在wxPython中遇到了一个非常奇怪的问题,我认为这是一个错误。本质上,我有一个TextCtrl,当我按ctrl键时会改变背景颜色(不要问为什么(。然后我有另一个调用 sizer 的按钮。Layout(( 在存储 TextCtrl 的 BoxSizer 上。当我这样做时,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()

现在,尝试转到 文本Ctrl 并按例如 ctrl+a,然后按按钮。这是一个错误吗?更重要的是,解决方法是什么?我猜 TextCtrl 更改了它在 Layout(( 下指定其大小或行为的属性之一,但我无法弄清楚正在更改哪个属性。

编辑:

我使用的是ubuntu 16.04,Python 2.7.12和wxpython版本3.0.2.0。

不管是什么,它已经在 wxpython 4 中解决了。
避免问题的方法。

TextCtrl赋予size=(n,n)

和/或

添加到大小器时,将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

最新更新