Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2008 22:21:16

gdever
От:
Зарегистрирован: 2008-01-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с Layoutами

Есть такая задача - сделать окно с кнопкой посередине, причем между кнопкой и границей окна должен быть зазор, ну скажем пять пикселей. Вопрос - как это сделать? Я пробовал так -

#!/usr/python

import wx

class ColoredPanel( wx.Panel ):
def __init__( self , parent , Color ):
wx.Panel.__init__( self , parent , id = -1 );
self.SetBackgroundColour( Color );

class TextFrame(wx.Frame):
def __init__( self ):
wx.Frame.__init__( self , None , -1 , ‘Example’ )

sizer = wx.FlexGridSizer( rows = 3 , cols = 3 )

sizer.AddGrowableCol( 0 , 0 );
sizer.AddGrowableCol( 1 , 1 );
sizer.AddGrowableCol( 2 , 0 );

sizer.AddGrowableRow( 0 , 0 );
sizer.AddGrowableRow( 1 , 1 );
sizer.AddGrowableRow( 2 , 0 );

sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );
sizer.Add( ColoredPanel( self , “green” ) , 1 , wx.EXPAND );
sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );

sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );
sizer.Add( wx.Button( self , label = “Button1” ) , 1 , wx.EXPAND );
sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );

sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );
sizer.Add( ColoredPanel( self , “green” ) , 1 , wx.EXPAND );
sizer.Add( ( 5 , 5 ) , 1 , wx.EXPAND );

self.SetSizer( sizer )
self.Fit();

if __name__ == ‘__main__’:
app = wx.PySimpleApp()
frame = TextFrame()
frame.Show()
app.MainLoop()

но чет как-то по-левому получается… Кто-нибудь знает как решить проблему? Может у кого-нибудь есть туториалы толковые?



Офлайн

#2 Янв. 9, 2008 15:16:31

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с Layoutами

Кнопка по середине по вертикали или горизонтали? И должна ли она растягиваться при изменении размеров окна?



Офлайн

#3 Янв. 9, 2008 15:26:26

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с Layoutами

А то самое простое:


#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# generated by wxGlade 0.5 on Wed Jan 09 16:03:52 2008

import wx

class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.button_1 = wx.Button(self, -1, “button_1”)

self.__set_properties()
self.__do_layout()
# end wxGlade

def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle(“frame_1”)
self.SetSize((228, 151))
# end wxGlade

def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
grid_sizer_1 = wx.FlexGridSizer(1, 1, 0, 0)
grid_sizer_1.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
self.SetSizer(grid_sizer_1)
grid_sizer_1.AddGrowableRow(0)
grid_sizer_1.AddGrowableCol(0)
self.Layout()
# end wxGlade

# end of class MyFrame


if __name__ == “__main__”:
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, “”)
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()



Офлайн

#4 Янв. 12, 2008 16:33:46

gdever
От:
Зарегистрирован: 2008-01-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с Layoutами

в том-то и дело что кнопка должна растягиваться при ресайзе окна по горизонтали и вертикали таким образом чтобы между кнопкой и рамкой окна всегда оставалось фиксированное количество пикселей



Офлайн

#5 Янв. 12, 2008 22:19:33

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с Layoutами

А по горизонтали и по вертикали зазоры должны быть одинаковые или могут быть разными?



Офлайн

#6 Янв. 12, 2008 22:32:33

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с Layoutами

Вот в самом общем случае можно играться с помощью AddSpacer.


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.5 on Sat Jan 12 23:22:40 2008 from C:\temp\sizers\sizers2.wxg

import wx

class MyFrame1(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame1.__init__
kwds = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.button_1 = wx.Button(self, -1, “button_1”)

self.__set_properties()
self.__do_layout()
# end wxGlade

def __set_properties(self):
# begin wxGlade: MyFrame1.__set_properties
self.SetTitle(“frame_2”)
# end wxGlade

def __do_layout(self):
# begin wxGlade: MyFrame1.__do_layout
grid_sizer_2 = wx.FlexGridSizer(3, 3)

grid_sizer_2.AddSpacer (10)
grid_sizer_2.AddSpacer (20)
grid_sizer_2.AddSpacer (5)
grid_sizer_2.AddSpacer (0)

grid_sizer_2.Add(self.button_1, 0, wx.EXPAND|wx.ALIGN_RIGHT|wx.ALIGN_BOTTOM, 0)

grid_sizer_2.AddSpacer (0)
grid_sizer_2.AddSpacer (15)

self.SetSizer(grid_sizer_2)
grid_sizer_2.Fit(self)
grid_sizer_2.AddGrowableRow(1)
grid_sizer_2.AddGrowableCol(1)
self.Layout()
# end wxGlade

# end of class MyFrame1


if __name__ == “__main__”:
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
dialog_1 = MyFrame1(None, -1, “”)
app.SetTopWindow(dialog_1)
dialog_1.Show()
app.MainLoop()



Офлайн

#7 Янв. 13, 2008 10:16:37

gdever
От:
Зарегистрирован: 2008-01-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с Layoutами

Jenyay
Вот в самом общем случае можно играться с помощью AddSpacer.
О! Супер! Спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version