كيف يمكنني توسيع wx.sizer من wx.panel عندما يتم توسيع لوحة داخل wx.sizer آخر؟

StackOverflow https://stackoverflow.com/questions/611592

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي wx.Panel له GridBagSizer المرتبطة به. يتم وضع هذه اللوحة داخل بحجم آخر (BoxSizer)، الذي لديه توسيع العلم إضافة - وهذا يعني أن لوحة يستغرق العرض الكامل للبحجم، وهو أمر عظيم. ... ولكن بحجم الداخلية الفريق لا تملأ اللوحة الآن.

ولقد حاولت وضع علم بحجم الداخلي لwx.Expand | wx.ALL عندما أضيف أنه من المكونات، ولكن ذلك لم ينجح. أي شخص يعرف كيف للتأكد من أن يبقى بحجم نفس العرض كما في لوحة عندما يتم توسيع لوحة؟

تحرير: كود بلادي أن يخلق لوحة تحتوي على GridBagSizer:

def getNewButton(self, bmp1, bmp2, label):
        panel = wx.Panel(self.frame, -1, pos=(0,0), style=wx.BORDER_THEME)
        sizer = wx.GridBagSizer(0, 1)

        #The button
        b = buttons.GenBitmapToggleButton(panel, wx.ID_ANY, None)
        self.frame.Bind(wx.EVT_BUTTON, self.OnToggleButton, b)
        b.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
        b.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
        mask = wx.Mask(bmp1, wx.BLUE)
        bmp1.SetMask(mask)
        b.SetBitmapLabel(bmp1)
        mask = wx.Mask(bmp2, wx.BLUE)
        bmp2.SetMask(mask)
        b.SetBitmapSelected(bmp2)
        b.SetToggle(False)
        b.SetInitialSize(size = wx.Size(30, 30))
        b.SetBezelWidth(0)

        #The Label Button
        l1 = buttons.GenButton(panel, wx.ID_ANY, label, style=wx.BORDER_NONE)
        self.frame.Bind(wx.EVT_BUTTON, self.OnFlatButton, l1)
        l1.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
        l1.Bind(wx.EVT_LEAVE_WINDOW, self.OnNonToggleMouseLeave)

        sizer.Add(b, wx.GBPosition(0,0))
        sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.SetSizeHints(panel)
        self.buttonsList.append(ImgToggleButtonComponents(b,panel,l1))
        return panel
هل كانت مفيدة؟

المحلول

كل شيء تفعلونه هنا تبدو معقولة. أعتقد أنك في عداد المفقودين مكالمة AddGrowableCol ().

    sizer.Add(b, wx.GBPosition(0,0))
    sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
    sizer.AddGrowableCol(1)

ولقد كان شخصيا أكثر حظا مع FlexGridSizer بدلا من GridBagSizer:

    fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
    fgs.AddGrowableCol(1)

    fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)

نصائح أخرى

وكنت قد حصلت على فكرة الحق. إذا قمت بنشر بعض التعليمات البرمجية، (فقط بعض العناصر النائبة، مع خلفية مختلفة الألوان أو شيء من هذا حتى نتمكن من معرفة ما يحدث) سيكون من الأسهل لتشخيص. تأكد من أن يتم تعيين والد لوحة الداخلي بشكل صحيح، وكنت قد حاولت بعض التلميحات بحجم: gridbagsizer.SetSizeHints (innerPanel) ونرى اذا كان ذلك يساعد

وهناك طريقة أخرى محتملة للقيام بذلك هي مع بحجم المربع:

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)

وكلا الاتجاهين عملت! شكر:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top