Как нарисовать центр границы панели в wxpython? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытался поместить центр границы на панель, используя координаты и размер, но граница остается постоянной. он не двигался по центру, а также пытался использовать wx.ALIGN_CENTER

Вот мой код:

import wx    
class myframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title= "asdsad")
        self.login_panel = PasswordPanel(self)         
        self.Layout()
        self.ShowFullScreen(True)
        self.Show()

class PasswordPanel(wx.Panel):    
      def __init__(self, parent):
           wx.Panel.__init__(self, parent=parent)
           self.panel = wx.Panel(self,pos=(350,350), size=(500,250), style=wx.SUNKEN_BORDER)    
if __name__ == '__main__':

    app = wx.App(False)
    frame = myframe()
    app.MainLoop()

Приведенный выше код работает, как и ожидалось, но если я добавлю код панели ниже, граница расширится.

self.quote = wx.StaticText(self.panel, label="")
           self.result = wx.StaticText(self.panel, label="")
           self.result.SetForegroundColour(wx.RED)
           self.ok_button = wx.Button(self.panel, label="Ok")
           self.cancel_button = wx.Button(self.panel, wx.ID_OK, 'Cancel')
           self.lblname = wx.StaticText(self.panel, label="Enter Password:")
           self.editname = wx.TextCtrl(self.panel, size=(240, -1), style=wx.TE_PASSWORD)
           self.ok_button.SetFocus()

           # Set sizer for the panel content
           self.sizer = wx.GridBagSizer(0, 0)
           self.sizer.Add(self.quote, (15, 45), flag = wx.ALL, border = 5)
           self.sizer.Add(self.result, (15, 46), flag = wx.ALL, border = 5)
           self.sizer.Add(self.lblname, (16, 45), flag = wx.ALL, border = 5)
           self.sizer.Add(self.editname, pos = (16,46), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
           self.sizer.Add(self.ok_button, pos = (17, 47),flag = wx.ALL, border = 5)
           self.sizer.Add(self.cancel_button, pos = (17, 48),flag = wx.ALL, border = 5)
           self.windowSizer = wx.BoxSizer()
           self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND, 5) 
           # Use the sizers 
           self.panel.SetSizerAndFit(self.sizer)  
           self.SetSizerAndFit(self.windowSizer)  
       self.Layout()

Пожалуйста, сообщите об этом.

1 Ответ

0 голосов
/ 06 мая 2018

Когда вы помещаете вашу панель в BoxSizer, а вы self.SetSizerandFit ее, вы расширяете панель до размера родительского PasswordPanel (self), который заполняет myframe.

Если вы удалите код, указанный ниже, рамка останется в центре панели:

    # Set sizer for the panel content
    self.sizer = wx.GridBagSizer(0, 0)
    self.sizer.Add(self.quote, (15, 45), flag = wx.ALL, border = 5)
    self.sizer.Add(self.result, (15, 46), flag = wx.ALL, border = 5)
    self.sizer.Add(self.lblname, (16, 45), flag = wx.ALL, border = 5)
    self.sizer.Add(self.editname, pos = (16,46), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
    self.sizer.Add(self.ok_button, pos = (17, 47),flag = wx.ALL, border = 5)
    self.sizer.Add(self.cancel_button, pos = (17, 48),flag = wx.ALL, border = 5)
    #self.windowSizer = wx.BoxSizer()
    #self.windowSizer.Add(self.panel, 0, wx.ALL, 5)
    # Use the sizers
    self.panel.SetSizerAndFit(self.sizer)
    #self.SetSizerAndFit(self.windowSizer)
    self.Layout()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...