wxPython:如何使TextCtrl不填充整个面板?

wxPython:如何使TextCtrl不填充整个面板?,wxpython,panel,textctrl,Wxpython,Panel,Textctrl,我有一个包含按钮的面板以及另一个本身包含textCtrl的面板。我有一个专门用于textctrl的面板,因为我试图在textctrl周围有一个自定义边框颜色。不幸的是,我无法让textCtrl不填充整个面板。我怀疑这与setSizerAndIt有关,但我不确定。是否可以在textCtrl周围有自定义颜色的边框? 代码如下: class MainWindow(wx.Frame): def __init__(self,parent,id,title): wx.Frame._

我有一个包含按钮的面板以及另一个本身包含textCtrl的面板。我有一个专门用于textctrl的面板,因为我试图在textctrl周围有一个自定义边框颜色。不幸的是,我无法让textCtrl不填充整个面板。我怀疑这与setSizerAndIt有关,但我不确定。是否可以在textCtrl周围有自定义颜色的边框? 代码如下:

class MainWindow(wx.Frame):
    def __init__(self,parent,id,title):

        wx.Frame.__init__(self,parent,wx.ID_ANY,title,size=(800,600))

    self.panel=wx.Panel(self,wx.ID_ANY,style=wx.BORDER_SIMPLE)
    self.panelText=wx.Panel(self.panel,wx.ID_ANY,
        size=(450,40),style=wx.BORDER_SIMPLE)

    self.panel.SetBackgroundColour("white")
    self.panelText.SetBackgroundColour("#27bbdc")

    size=self.panelText.GetSize()

    self.sizerControls=wx.BoxSizer(wx.HORIZONTAL)
    self.sizerMain=wx.BoxSizer(wx.VERTICAL)
    #self.sizerText=wx.BoxSizer(wx.HORIZONTAL)

    #-------------Objects------------
    self.text=wx.TextCtrl(self.panelText,-1, style=wx.TE_READONLY|wx.NO_BORDER,
        size=(size[0]-4,size[1]-4),pos=(1,1))
    image=wx.Image("Button_80x80.png",wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    self.buttonFolder=wx.BitmapButton(self.panel,-1,bitmap=image,
        size=(95,95),style=wx.NO_BORDER)        

    #-------------Sizers-------------
    #self.sizerText.Add((0,0),1)
    #self.sizerText.Add(self.text,0,flag=wx.ALIGN_CENTER)
    #self.sizerText.Add((0,0),1)
    self.sizerControls.Add(self.panelText,1,flag=wx.ALIGN_CENTER)
    self.sizerControls.Add(self.buttonFolder,0,flag=wx.ALIGN_CENTER)
    self.sizerMain.Add(self.sizerControls,1,flag=wx.ALIGN_CENTER)

    #-------------Events-------------
    self.Bind(wx.EVT_BUTTON, self.OnButton, self.buttonFolder)

    self.panel.SetSizerAndFit(self.sizerMain)

    self.Show()

如果不希望文本控件展开,则在将其添加到大小调整器时,不要将其比例设置为1(一)。您甚至可以添加一个wx.ALL标志,并在其周围放置几个像素的边框。您还可以查看Widget检查工具,查看它如何突出显示大小调整器。然后您可以使用sizer作为边界:

或者参见Robin Dunn在本帖中关于绘制自定义边框的回答:


您的问题是
wx.TextCtrl
在面板中没有居中。这是因为您正在将位置设置为(1,1)(即左上角右下方1个像素)

我运行了您的代码(注释掉了与
wx.BitmapButton
相关的代码,因为我没有该文件)。如果将面板差异从4像素增加到10像素,您会看到:

注意所有的颜色都在右下角吗

迈克·德里斯科尔已经给了你答案,但你有点误解了。使用
wx.All
标志和尺寸标注器的目的不是创建一个可以设置颜色的边框,而是将
wx.TextCtrl
置于面板中央,让面板的颜色显示出来

看看这个代码片段

self.sizerText=wx.BoxSizer(wx.HORIZONTAL)
self.text=wx.TextCtrl(self.panelText,-1, style=wx.TE_READONLY|wx.NO_BORDER)
#dont' set the size nor the position
self.sizerText.Add(self.text, 1, flag=wx.ALL|wx.EXPAND, border=10)
#make the textCtrl expand in all possible directions but leave a 10 pixel border on all sides
#since the border is on left/right and top/bottom this is equivalent to panel size - 20
self.panelText.SetSizer(self.sizerText)
这将产生如下窗口:


作为旁注,正如我在代码中提到的,将面板大小设置为-4只相当于2像素的边框,这很难看到。这可能也是您的问题的一部分。

谢谢您的回答,但不幸的是,我在使用wx添加到施胶器时,没有将比例设置为1。所有这些都不允许我保存边框的颜色,不幸的是,我无法理解Robin的Dunn回答(我尝试创建自定义的textctrl,如他的示例所示,但行为不会改变)。你会有其他的想法或具体的例子来说明如何做到这一点吗?非常感谢你的帮助wx。所有这些都只是在小部件周围放置了空间。我认为这会使它看起来有一个更大的边界。不管怎样,你可以在acattle解释我所说的内容时看到他的答案。太棒了!非常感谢你们这些家伙完成了这个把戏太好了!我想我对如何使用和使用SetSizer做什么也有点困惑。