2013-04-26 12 views
1

我想創建一個表,使用wxlistctrl,其中的列將隨着它的父項一起增長。我希望它的功能像一個可生長列的網格化器。我也不希望用戶能夠通過單擊並拖動垂直規則來調整寬度。這是可能的listctrl或者我將不得不做我自己的控制?growxwxpython listctrl列

這裏是什麼,我現在已經

import wx 
class MyForm(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Tutorial") 
     panel = wx.Panel(self, wx.ID_ANY) 
     self.index = 0 
     self.list_ctrl = wx.ListCtrl(panel, size=(-1,100), 
         style=wx.LC_REPORT 
         |wx.BORDER_SUNKEN 
         ) 
     self.list_ctrl.InsertColumn(0, 'Subject') 
     self.list_ctrl.InsertColumn(1, 'Due') 
     self.list_ctrl.InsertColumn(2, 'Location', width=125) 

     btn = wx.Button(panel, label="Add Line") 
     btn.Bind(wx.EVT_BUTTON, self.add_line) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5) 
     sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5) 
     panel.SetSizer(sizer) 

    def add_line(self, event): 
     line = "Line %s" % self.index 
     self.list_ctrl.InsertStringItem(self.index, line) 
     self.list_ctrl.SetStringItem(self.index, 1, "01/19/2010") 
     self.list_ctrl.SetStringItem(self.index, 2, "USA") 
     self.index += 1 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 
+1

我們能看到你的代碼嗎? :) – 2013-04-26 22:44:55

+0

我不知道爲什麼需要代碼。它現在只是一個默認的listctrl。 – Wallace 2013-04-26 22:51:28

+0

沒有人會爲你*建立它*。你應該發佈你想要的東西,否則沒有人會覺得需要幫助你。 – 2013-04-26 22:53:14

回答

0

我不知道這是否是你想要的,但你可以嘗試這樣的一個例子;

sizer.Add(self.list_ctrl, 1, wx.ALL | wx.GROW, 5) 

Demo

可悲的是,你不能禁用列寬調整大小。至少不在默認庫中; http://wxpython.org/Phoenix/docs/html/ListCtrl.html

+0

可悲的是,你不能禁用列寬調整大小。 - >不真實 – 2015-02-21 00:05:53

1

請參閱wx.lib.mixins.listctrl模塊中的ListCtrlAutoWidthMixin類。

+0

對不起,這與問題無關 - 請將它添加爲評論 - 他正在嘗試調整Veto的大小 – 2015-02-20 23:51:50

0

我也不希望用戶能夠通過單擊並拖動垂直規則來調整寬度。

這至少是可能的:

self.list_ctrl.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.OnColumnResizeStart) 
# ... 
def OnColumnResizeStart(self, event): 
    # Veto if on auto mode: 
    if self.autoColWidths: event.Veto() 
    else: event.Skip()