2012-07-03 13 views
11

में कॉलम चौड़ाई उपलब्ध स्थान ले जाएं मेरे पास मेरे wx.ListCtrl(size=(-1,200)) में तीन कॉलम हैं। मैं स्तंभों को इसके निर्माण के बाद ListCtrl की चौड़ाई भरना चाहता हूं। आदर्श रूप से, पहला कॉलम अतिरिक्त स्थान को भरने के लिए विस्तारित हो सकता है। दूसरे और तीसरे कॉलम को विस्तार करने की आवश्यकता नहीं है, और अधिमानतः चौड़ाई (ओसीडी स्वरूपण) में नहीं बदलेगा।WxPython ListCtrl

वर्तमान में, प्रत्येक ListCtrl कॉलम (width=-1) का उपयोग करके स्थापित किया गया है।

मुझे लगता है मैं अपने लाभ के लिए कोड के इस भाग का उपयोग कर सकते है ...

# Expand first column to fit longest entry item 
list_ctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) 

छद्म कोड (शायद):

# After wx.ListCtrl creation 
Get width of ListCtrl control 
Get width of each ListCtrl column 
Calculate unused width of ListCtrl 
Set first column width to original width + unused width 

जोड़ा गया:

को देखते हुए निम्नलिखित उदाहरण, मुझे समझ में नहीं आता कि autowidthmixin कैसे शुरू करें। वर्तमान में, मैं सूची को एक फ़ोल्ड पैनेल के अंदर रखने की कोशिश कर रहा हूं। Foldpanel एक वर्ग है और कक्षा के भीतर एक समारोह listctrl बनाता है। मुझे विश्वास भी नहीं है कि इस समय मेरे कोड की संरचना को दिया जा सकता है!

class MyPanel(wx.Panel): 

    def __init__(self, parent, dictionary): 
     self.dictionary = dictionary 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     # Layout helpers (sizers) and content creation (setPanel) 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 
     self.SetSizer(self.mainSizer) 
     list_ctrl = self.setPanel() 
     self.mainSizer.Add(list_ctrl, 0, wx.ALL | wx.EXPAND, 5) 
     self.GetSizer().SetSizeHints(self) 

    def setPanel(self): 
     index = 0 

     list_ctrl = wx.ListCtrl(self, size=(-1, 200), 
           style=wx.LC_REPORT | wx.BORDER_SUNKEN) 

     list_ctrl.InsertColumn(0, "Variable", format=wx.LIST_FORMAT_LEFT, width=-1) 
     list_ctrl.InsertColumn(1, "x", format=wx.LIST_FORMAT_RIGHT, width=-1) 
     list_ctrl.InsertColumn(2, u"\u03D0", format=wx.LIST_FORMAT_RIGHT, width=-1) 

     for key, value in self.dictionary.iteritems(): 
      list_ctrl.InsertStringItem(index, str(key)) 
      list_ctrl.SetStringItem(index, 1, ("%.2f" % value[0])) 
      list_ctrl.SetStringItem(index, 2, ("%.8f" % value[1])) 
      index += 1 

     list_ctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) 
     list_ctrl.SetColumnWidth(1, wx.LIST_AUTOSIZE) 
     list_ctrl.SetColumnWidth(2, wx.LIST_AUTOSIZE) 

     return list_ctrl 

उत्तर

13

आपको ListCtrlAutoWidthMixin mixin क्लास का उपयोग करने की आवश्यकता है। WxPython डेमो एप्लिकेशन ListCtrl डेमो में एक उदाहरण है। documentation के अनुसार, आप इसे सेट करने के लिए कौन सा कॉलम आकार देने के लिए अपने setResizeColumn विधि का उपयोग कर सकते हैं। डिफ़ॉल्ट अंतिम कॉलम है।

संपादित करें (07/05/2012): अपने कोड में, डेमो में एक के समान ListCtrl क्लास बनाएं। यह कुछ इस तरह दिखेगा: फिर

class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): 
    def __init__(self, parent, ID, pos=wx.DefaultPosition, 
       size=wx.DefaultSize, style=0): 
     wx.ListCtrl.__init__(self, parent, ID, pos, size, style) 
     listmix.ListCtrlAutoWidthMixin.__init__(self) 
     self.setResizeColumn(0) 

जब आप इसे का दृष्टांत, तो आप सिर्फ फोन करता हूँ list_ctrl = TestListCtrl (ARG1, ARG2 ... argN)

ध्यान दें कि मैं setResizeColumn के लिए एक कॉल शामिल () ऊपर मेरे कोड में। यह परीक्षण नहीं किया गया है, लेकिन यह काम करना चाहिए।

+0

कुछ अतिरिक्त जानकारी और कोड स्निपेट जोड़ा गया। मैं अपने कोड एटीएम के लेआउट दिए गए मिक्स्ड क्लास का उपयोग करने का तरीका नहीं समझ सकता। –