2011-10-17 5 views
0

wxPythonで基本的な日付セレクター/カレンダーを作成しようとしています。これまで私は を管理して、必要なウィジェットをすべてグリッドに追加しましたが、私はそれらを得るために苦労しています は正しく配置されました。私は完全に理解していない多くのものがありますが、 特に指定されていないにもかかわらず、大きな境界に囲まれた と思われるwx.SpinCtrlウィジェットでは特に不満を感じています。誰でも これを削除する方法を教えていただけますか?スピンコントロールをフレームの上部から数ピクセルだけ離れたところにある のテキストに置き換えます。テキストの '2月'は、コントロールの下部から同じピクセル数の です。私はすべてのアプローチを試みましたが、どんなものもありませんでした。 は何の効果もありません。wxPython:wx.SpinCtrlボーダー管理

import wx 
import calendar 

MONTH_NAME_AS_KEY = {"January":1, "February":2, "March":3, "April":4, "May":5, "June":6, 
       "July":7, "August":8, "September":9, "October":10, "November":11, 
       "December":12} 

def getMonthNumber(nameAsString): 
    return MONTH_NAME_AS_KEY.get(nameAsString) 


class Example(wx.Frame): 

    def __init__(self, parent, title): 
     super(Example, self).__init__(parent, title=title,size=(300, 350)) 

     self.InitUI() 
     self.Centre() 
     self.Show() 

    def InitUI(self): 

     self.panel = wx.Panel(self) 

     mainSizer = wx.BoxSizer(wx.VERTICAL) 

     fgs = wx.FlexGridSizer(rows=2, cols=2) 

     # fgs 1: blank space 
     filler = wx.StaticText(self.panel, -1, label="") 
     fgs.Add(filler) 

     # fgs 2: creating containers 
     vSizer = wx.BoxSizer(wx.VERTICAL) 
     yearNavigationBox = wx.BoxSizer(wx.HORIZONTAL) 
     monthNavigationBox = wx.BoxSizer(wx.HORIZONTAL) 

     # year navigation 
     sc = wx.SpinCtrl(self.panel,-1, "", size=(70,70)) 
     sc.SetRange(1980,2060) 
     sc.SetValue(2011) 

     yearNavigationBox.Add(sc, wx.ALL, wx.EXPAND|wx.TOP) 

     # month navigation 
     monthDown = wx.StaticText(self.panel, -1, label="<")  
     monthUp = wx.StaticText(self.panel, -1, label=">")  


     monthName = wx.StaticText(self.panel, wx.ID_ANY, label="February") 

     monthNavigationBox.Add(monthDown) 
     monthNavigationBox.Add(monthName) 
     monthNavigationBox.Add(monthUp) 

     vSizer.Add(yearNavigationBox) 
     vSizer.Add(monthNavigationBox) 

     fgs.Add(vSizer) 

     # fgs 3: the date of the month writ large 
     date = wx.StaticText(self.panel, wx.ID_ANY, label='31', style=wx.ALIGN_CENTER) 
     dateFont = wx.Font(150, wx.DEFAULT, wx.NORMAL, wx.BOLD) 
     date.SetFont(dateFont) 

     fgs.Add(date) 


     # fgs 4: the date grid 
     dateSquareSizer = wx.GridSizer(rows=6, cols=7, hgap=1, vgap=6) 

     dayFont = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD) 
     days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] 
     for item in days: 
      day = wx.StaticText(self.panel, wx.ID_ANY, label=item) 
      day.SetFont(dayFont) 
      dateSquareSizer.Add(day)  

     y = 2012 
     m = getMonthNumber(monthName.GetLabel())  

     gridData = list(calendar.Calendar().itermonthdays(y, m)) 
     while len(gridData)<43: gridData.append(0) 

     for i in gridData: 
      if i == 0: i="" 
      square = wx.StaticText(self.panel, wx.ID_ANY, label=str(i)) 
      square.SetFont(dayFont) 
      dateSquareSizer.Add(square, wx.ID_ANY)  

     fgs.Add(dateSquareSizer) 

     mainSizer.Add(fgs, wx.ALL, 2) 

     self.panel.SetSizer(mainSizer) 
     mainSizer.Fit(self) 



if __name__ == '__main__': 

    app = wx.App() 
    Example(None, title='') 
    app.MainLoop() 

答えて

1

サイザーのAddシグネチャが正しくないようです。それはsizer.Add(ウィジェット、比例、フラグ、ボーダー)にする必要があります

あなたは割合をスキップし続け、境界を全く指定しません。あなたの代わりにこれをしなかった場合:

yearNavigationBox.Add(sc, 0, wx.EXPAND|wx.TOP, 5) 

をそれはフレームの上部の下にスピナー5つのピクセルを入れます(または任意のウィジェットは、この1の前に追加されます)。あなたは、比例フラグをスキップし、その場所に他のランダムなものを置くいくつかの他の場所があります。あなたは通過してそれを変えたいと思うでしょう。ここではカップルのチュートリアルは、次のとおりです。

+0

おかげでマイク、これらのチュートリアルを経て、うまくいけば、ウィジェットの位置でわずかに良いグリップを持っています。 –

+0

素晴らしい!私はあなたがそれを把握してうれしいです。 –

関連する問題