Я хочу, чтобы мои StaticTexts и TextCtrls быть выровнены так: http://i.stack.imgur.com/llE7F.pngWxPython правильный способ выравнивания виджетов
, так что я сделал это:
import wx
class LoginForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,wx.ID_ANY,title='Login',size=(800,600))
self.panel = wx.Panel(self,wx.ID_ANY)
email_label = wx.StaticText(self.panel,wx.ID_ANY,'Email: ')
pass_label = wx.StaticText(self.panel,wx.ID_ANY,'Password: ')
email = wx.TextCtrl(self.panel,wx.ID_ANY,'',size=(150,-1))
passwd = wx.TextCtrl(self.panel,wx.ID_ANY,'',size=(150,-1))
loginBtn = wx.Button(self.panel,wx.ID_ANY,'Login')
self.Bind(wx.EVT_BUTTON,self.onLogin,loginBtn)
topSizer = wx.BoxSizer(wx.VERTICAL)
labelSizer = wx.BoxSizer(wx.HORIZONTAL)
inputSizer = wx.BoxSizer(wx.HORIZONTAL)
labelSizer.Add(email_label,0,wx.RIGHT,112)
labelSizer.Add(pass_label,0,wx.RIGHT,177)
inputSizer.Add(email,0,wx.RIGHT,5)
inputSizer.Add(passwd,0,wx.RIGHT,5)
inputSizer.Add(loginBtn,0,wx.RIGHT,10)
topSizer.Add(labelSizer,0,wx.TOP|wx.ALIGN_RIGHT,0)
topSizer.Add(inputSizer,0,wx.TOP|wx.ALIGN_RIGHT,0)
self.panel.SetSizer(topSizer)
def onLogin(self):
pass
if __name__=='__main__':
app = wx.App()
frame = LoginForm().Show()
app.MainLoop()
Является ли это правильный путь? Поиграть со значениями флажков и границ? Или есть другой способ сделать это?
То, как я это сделал, если я хочу изменить, например, ширина кнопки входа, все будет перепутано
Ну, это мой первый опыт работы с wxPython. У меня есть два горизонтальных sizers, потому что я хочу, чтобы StaticTexts был на сыром, а TextCtrls - на следующем raw. Если бы я понял, что вы сказали, я могу использовать wxFlexGridSizer вместо этих горизонтальных sizers. Это что-то вроде таблицы HTML, используемой для макета страницы? Если да, можно ли выровнять «email:» над полем TextCtrl, используя этот тип sizers? –