1

我有一个包含按钮的面板以及另一个本身包含 textCtrl 的面板。我有一个专门用于 textctrl 的面板,因为我试图在 textCtrl 周围设置自定义边框颜色。不幸的是,我无法让 textCtrl 不填充整个面板。我怀疑它与 SetSizerAndFit 有关,但我不确定。是否可以在 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()
4

2 回答 2

2

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

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

10 像素边框,不居中

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

Mike Driscoll 已经给你答案了,但是你有点误解了。使用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)

这会导致这样的窗口: 10 像素边框,居中

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

于 2012-08-22T03:32:01.763 回答
1

如果您不希望文本控件扩展,则在将其添加到 sizer 时不要将其比例设置为 1(一)。您甚至可以添加一个 wx.ALL 标志并在其周围放置几个像素的边框。您还可以查看小部件检查工具以了解它如何突出显示大小。然后你可以使用 sizer 作为边框:http ://wiki.wxpython.org/Widget%20Inspection%20Tool

或者在这个线程中查看 Robin Dunn 关于绘制自定义边框的回答:

https://groups.google.com/forum/?fromgroups=#!topic/wxpython-users/aZUo4R2rubY

于 2012-08-21T20:18:38.720 回答