我有一个包含按钮的面板以及另一个包含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()
答案 0 :(得分:2)
您的问题是wx.TextCtrl
未在面板中居中。这是因为您将位置设置为(1,1)(即左上角和右下角1个像素)
我运行了您的代码(注释掉与wx.BitmapButton
相关的代码,因为我没有该文件)。如果将面板差异从4像素增加到10像素,您会看到:
注意右下角的所有颜色是怎样的?
迈克德里斯科尔已经给你答案,但你有点误解。使用wx.All
标志和sizer的重点不是要创建一个可以设置颜色的边框,而是将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像素的边框,这很难看到。这可能也是你问题的一部分。
答案 1 :(得分: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