2013-12-20 61 views
0

This new question is build on this使用wxPython進行佈局管理

我遇到了在wxPython中管理佈局的問題。 在這個程序中,我有兩個佈局中的兩個按鈕。但不管我做什麼,我都不能改變這些按鈕的位置或對齊方式。這些按鈕被固定在藍色和黃色的佈局。

我的代碼是這樣的:

import wx 
class myframe(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, size=(1000,700)) 

     self.TitlePanel = wx.Panel(self, size=(350, 400)) 
     self.TitlePanel.SetBackgroundColour("green") 

     self.newPanel = wx.Panel(self, size=(300, 250)) 
     self.newPanel.SetBackgroundColour("black") 
     self.newPanel.Hide() 

     self.imgPanel = wx.Panel(self, size=(300, 250)) 
     self.imgPanel.SetBackgroundColour("red") 

     self.modulePanel=wx.Panel(self, size=(350, 250)) 
     self.modulePanel.SetBackgroundColour("blue") 

     self.TCPanel=wx.Panel(self, size=(300, 250)) 
     self.TCPanel.SetBackgroundColour("yellow") 

     self.myGridSizer = wx.GridBagSizer(1,1) 
     self.myGridSizer.SetEmptyCellSize((0, 0)) 
     self.myGridSizer.Add(self.TitlePanel, pos=(0, 0), span=(4,8), flag=wx.EXPAND) 
     self.myGridSizer.Add(self.imgPanel, pos=(0, 10), span=(4,8), flag=wx.EXPAND) 
     self.myGridSizer.Add(self.modulePanel, pos=(10, 0), span=(4,8), flag=wx.EXPAND) 
     self.myGridSizer.Add(self.TCPanel, pos=(10, 10), span=(4,8), flag=wx.EXPAND) 
    ############################# Add Text to 1st Panel ######################################### 
     self.text1 = wx.StaticText(self.TitlePanel, label="This is a test run",style=wx.ALIGN_LEFT,size=(300,-1)) 
     font = wx.Font(18, wx.DECORATIVE, wx.ITALIC,wx.BOLD, wx.NORMAL) 
     self.text1.SetFont(font) 
     self.titleSizer = wx.BoxSizer() 
     self.titleSizer.Add(self.text1, flag=wx.CENTER|wx.LEFT|wx.ALIGN_RIGHT,border=10) 
     self.TitlePanel.SetSizer(self.titleSizer) 
    ######################################################################################### 
    ############################### Add Buttons in 3rd Panel ################################ 
     self.moduleSizer = wx.BoxSizer() 
     self.button1 = wx.Button(self.modulePanel, label="Show Yellow Panel",size=(200,-1),style=wx.ALIGN_RIGHT)  
     self.moduleSizer.Add(self.button1, flag=wx.CENTER|wx.EXPAND|wx.ALIGN_RIGHT,border=10) 
    ######################################################################################### 
     self.TCSizer=wx.BoxSizer() 
     self.button2 = wx.Button(self.TCPanel, label="Bring Black Panel",size=(200,-1)) 
     self.TCSizer.Add(self.button2, flag=wx.CENTER|wx.RIGHT|wx.ALIGN_RIGHT,border=10) 
    ######################################################################################### 
     self.SetSizer(self.myGridSizer) 

     self.text1.Bind(wx.EVT_LEFT_DCLICK, self.hideMe) 
     self.button1.Bind(wx.EVT_BUTTON, self.showMe) 
     self.button2.Bind(wx.EVT_BUTTON, self.hideMe) 

    def hideMe(self, event): 
     self.TCPanel.Hide() 
     self.myGridSizer.Replace(self.TCPanel, self.newPanel) 
     self.newPanel.Show() 
     self.Layout() 

    def showMe(self, event): 
     self.newPanel.Hide() 
     self.myGridSizer.Replace(self.newPanel, self.TCPanel) 
     self.TCPanel.Show() 
     self.Layout() 

if __name__ == "__main__": 
    app = wx.App() 
    region = myframe() 
    region.Show() 
    app.MainLoop() 

現在,如果我能採取的按鈕佈局,這將是很好的稍微右側。 有沒有什麼好的教程。請建議。

我希望做什麼:從藍色面板

  1. 按鈕應該是在藍色面板從黃色面板

  2. 按鈕的中間將有我想要的像素的縮進。如果我想留下20像素的間隙,那麼按鈕將放置在黃色面板中20像素之後。

如果這是可能的話,這將是一個很大的幫助。

Explanation of the layout

+0

你可以畫出並解釋你希望它看起來像和行爲?我懷疑你使用你的sizer層次結構,並錯誤地鍵入你想要實現的內容... – Fenikso

+0

我提供了一個繪圖,希望這可以清除所有內容。 – Sam

+0

我明白了。不過,我不確定我會很快有機會回答這個問題......但無論如何,這將有助於他人理解這個問題。 – Fenikso

回答

1
  1. 得到這個按鈕被安置在市中心僅使用標誌wx.CENTER。 您還需要將此尺寸設置爲面板尺寸。

    self.moduleSizer = wx.BoxSizer(wx.VERTICAL) 
    self.button1 = wx.Button(self.modulePanel, label="Show Yellow Panel", 
             size=(200, -1)) 
    self.moduleSizer.Add(self.button1, flag=wx.CENTER) 
    self.modulePanel.SetSizer(self.moduleSizer) 
    
  2. 爲了得到這個按鈕位於左側用20使用標誌wx.Left縮進和設置邊框爲20 正如上面還需要該分級機設置爲它的面板。

    self.TCSizer = wx.BoxSizer(wx.VERTICAL) 
    self.button2 = wx.Button(self.TCPanel, label="Bring Black Panel", 
             size=(200, -1)) 
    self.TCSizer.Add(self.button2, flag=wx.LEFT, border=20) 
    self.TCPanel.SetSizer(self.TCSizer) 
    

在你初始化方法調用結束。

self.Layout() 

使sizer更新自己。

+0

'self.modulePanel.SetSizer(self.moduleSizer)'這個命令使我的一天..謝謝你 – Sam