文本控件在改变颜色并调用尺寸布局后消失

2024-04-19 09:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在wxPython中遇到了一个非常奇怪的问题,我认为这是一个bug。基本上,我有一个TextCtrl,当我按下ctrl键(不要问为什么)时,它会改变背景色。然后我有另一个按钮sizer.布局()在存储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()

现在,尝试转到TextCtrl并按ctrl+a,然后按按钮。这是虫子吗?更重要的是,解决方法是什么?我猜TextCtrl更改了它在Layout()下指定其大小或行为的属性之一,但我不知道哪个属性正在更改。你知道吗

编辑:

我使用的是ubuntu16.04、python2.7.12和wxpython3.0.2.0版本。你知道吗


Tags: selftxteventinitdef按钮classparent
1条回答
网友
1楼 · 发布于 2024-04-19 09:27:40

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

TextCtrl一个size=(n,n)

和/或

添加到sizer时,用wx.EXPAND替换wx.CENTER。你知道吗

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

相关问题 更多 >