Форум сайта python.su
Я разбираюсь с созданием GUI с помощью wxGlade и у меня возник вопрос. На картинке ниже у меня представлено окошко wxGlade. sizer_3 - это горизонтальный Sizer с двумя кнопками. Как мне его “прижать к низу” ? ( При этом можно снизу сделать небольшой, постоянный отступ. sizer_2 - это вертикальный sizer, видимо нужно что-то сделать с sizer_3. Возможно ли это?
Офлайн
не знаком с wxGlade, но можешь попробовать засунуть его в вертикальный Box (который будет parent по сравнению с твоим текущим child)
без кода сложно сказать, и линк не открывается с картинкой.
Чтоб был прижат к низу по идее при добавлении к сайзеру используется ключ proportion=1, для добавляемой ячейки т.е. что то типа:
parentSizer.Add(childSizer, proportion=1)
вот интересная статья по сайзерам http://jenyay.net/Programming/WxSizer мб поможет
Отредактировано (Ноя. 9, 2011 11:57:07)
Офлайн
Piton23Спасибо, вот генерируемый код:
не знаком с wxGlade, но можешь попробовать засунуть его в вертикальный Box (который будет parent по сравнению с твоим текущим child)
без кода сложно сказать, и линк не открывается с картинкой.
Чтоб был прижат к низу по идее при добавлении к сайзеру используется ключ proportion=1, для добавляемой ячейки т.е. что то типа:
parentSizer.Add(childSizer, proportion=1)
вот интересная статья по сайзерам http://jenyay.net/Programming/WxSizer мб поможет
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade HG on Wed Nov 09 13:50:00 2011
import wx
# begin wxGlade: extracode
# end wxGlade
class EditWindow(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: EditWindow.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.label_1 = wx.StaticText(self, -1, "Base Address:")
self.spinBaseAddress = wx.SpinCtrl(self, -1, "", min=0, max=1000)
self.label_2 = wx.StaticText(self, -1, "Low Bound:")
self.spinHighBound = wx.SpinCtrl(self, -1, "", min=-1000, max=1000)
self.label_3 = wx.StaticText(self, -1, "High Bound:")
self.spinLowBound = wx.SpinCtrl(self, -1, "", min=-1000, max=1000)
self.buttonSave = wx.Button(self, -1, "Save")
self.buttonClose = wx.Button(self, -1, "Close")
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_BUTTON, self.SaveButtonClick, self.buttonSave)
self.Bind(wx.EVT_BUTTON, self.CloseButtonClick, self.buttonClose)
# end wxGlade
def __set_properties(self):
# begin wxGlade: EditWindow.__set_properties
self.SetTitle("frame_2")
# end wxGlade
def __do_layout(self):
# begin wxGlade: EditWindow.__do_layout
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
grid_sizer_1 = wx.GridSizer(3, 2, 5, 5)
grid_sizer_1.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.spinBaseAddress, 0, 0, 0)
grid_sizer_1.Add(self.label_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.spinHighBound, 0, 0, 0)
grid_sizer_1.Add(self.label_3, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.spinLowBound, 0, 0, 0)
sizer_2.Add(grid_sizer_1, 1, wx.EXPAND, 0)
sizer_2.Add((20, 20), 0, 0, 0)
sizer_3.Add(self.buttonSave, 0, 0, 0)
sizer_3.Add(self.buttonClose, 0, 0, 0)
sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
self.SetSizer(sizer_2)
sizer_2.Fit(self)
self.Layout()
# end wxGlade
def SaveButtonClick(self, event): # wxGlade: EditWindow.<event_handler>
print "Event handler `SaveButtonClick' not implemented"
event.Skip()
def CloseButtonClick(self, event): # wxGlade: EditWindow.<event_handler>
print "Event handler `CloseButtonClick' not implemented"
event.Skip()
# end of class EditWindow
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = (None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
Офлайн
О наконецто рисунок вижу, лучше б в пэинте нарисовал(передвинул) как надо, чтоб видеть какой ты хочешь результат.
Тут одно из двух:
1) либо тебе надо убрать пространство, где 2 кнопки остаются на местах своих
2) либо тебе надо размер окна (общий фрэйм) оставить таким ж и чтоб после 6 ячеек было пустое пространство и в самом низу были 2 кнопки
решение для второй задачи:
вон у тебя есть sizer_3 горизонтальный с двумя ячейками (кнопками), в каждой из них пропишешь flag = wx.ALIGN_BOTTOM. Но визуального эфекта не будет, надо также растянуть последнюю ячейку (ячейка представляет собой sizer_3) вертикального сайзера (он же sizer_2). А чет присмотрелся у тебя он и стоит в 1, т.е. растянут
что то типа:
sizer_3.Add(self.buttonSave, flag = wx.ALIGN_BOTTOM)
sizer_3.Add(self.buttonClose, flag = wx.ALIGN_BOTTOM)
sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
по идее все, дальше думать
решение для первой задачи: использовать другой тип сайзера, так с ходу не скажу, но статья поможет там все подробно описано
Офлайн
Piton23спасибо большое! проблема решения, как раз то, что и нужно
О наконецто рисунок вижу, лучше б в пэинте нарисовал(передвинул) как надо, чтоб видеть какой ты хочешь результат.
Тут одно из двух:
1) либо тебе надо убрать пространство, где 2 кнопки остаются на местах своих
2) либо тебе надо размер окна (общий фрэйм) оставить таким ж и чтоб после 6 ячеек было пустое пространство и в самом низу были 2 кнопки
решение для второй задачи:
вон у тебя есть sizer_3 горизонтальный с двумя ячейками (кнопками), в каждой из них пропишешь flag = wx.ALIGN_BOTTOM. Но визуального эфекта не будет, надо также растянуть последнюю ячейку (ячейка представляет собой sizer_3) вертикального сайзера (он же sizer_2). А чет присмотрелся у тебя он и стоит в 1, т.е. растянут
что то типа:
sizer_3.Add(self.buttonSave, flag = wx.ALIGN_BOTTOM)
sizer_3.Add(self.buttonClose, flag = wx.ALIGN_BOTTOM)
sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
по идее все, дальше думать
решение для первой задачи: использовать другой тип сайзера, так с ходу не скажу, но статья поможет там все подробно описано
Офлайн