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ピクセルの境界線

すべての色が右下にあることに注意してください。

マイク・ドリスコルはすでにあなたに答えを与えました、しかしあなたは少し誤解しました。旗とサイザーを使用するポイントは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

テキストコントロールを拡張したくない場合は、サイザーに追加するときにその比率を1に設定しないでください。wx.ALLフラグを追加して、その周囲に数ピクセルの境界線を配置することもできます。ウィジェット検査ツールをチェックして、サイザーがどのように強調表示されるかを確認することもできます。次に、サイザーを境界線として使用できます:http ://wiki.wxpython.org/Widget%20Inspection%20Tool

または、カスタム境界線の描画に関するこのスレッドのRobinDunnの回答を参照してください。

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

于 2012-08-21T20:18:38.720 に答える