我正在學習wxpython並嘗試使嵌套面板工作。這是一個爲更復雜的屏幕做準備的練習,因此它可能看起來有點複雜,但這是有目的的;)。 我想要做的是以下幾點: 創建頂部框架 添加面板使其 添加一些文本和輸入域將其 使用垂直boxsizer做面板佈局 這裏是我是如何實現它:如何在wxpython中使嵌套面板和Sizer工作
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent)
#add position panel
posPnl = wx.Panel(self)
lbl1 = wx.StaticText(posPnl, label="Position")
lbl2 = wx.StaticText(posPnl, label="Size")
sizeCtrl = wx.TextCtrl(posPnl)
posPnlSzr = wx.BoxSizer(wx.HORIZONTAL)
posPnlSzr.Add(lbl1, 1, wx.GROW)
posPnlSzr.Add(sizeCtrl, 1, wx.GROW)
posPnlSzr.Add(lbl2, 1, wx.GROW)
#create a top leverl sizer to add to the frame itself
mainSzr = wx.BoxSizer(wx.VERTICAL)
mainSzr.Add(posPnlSzr)
self.SetSizerAndFit(mainSzr)
self.Show()
app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()
我得到的只是一個帶有'Pos'字樣的小空白屏幕。我在這裏做錯了什麼?
謝謝,這真的很有幫助和清楚。其中一個問題是:你是否真的認爲你不應該將sizer添加到sizer中?我在很熟悉的教程中也看到了很多。 – Django
@Django:我不認爲Boud說你永遠都不應該將sizer添加到sizer中,只是在這種情況下,你試圖將StaticTexts和TextCtrls添加到面板上,而是將它添加到Frame中。該框架包含mainSizer,其中包含posPnlSzr。 posPnl不包含posPnlSzr也不包含posPnl。問題是posPnl從未真正被使用。 Boud的代碼修復了這個問題。 – acattle