2016-06-26 11 views
0

После хороших советов в BoxSizer from the ground Up уроке я рефакторинга кода для исключения wx.LEFT/RIGHT/TOP/BOTTOM флаги в "распорки" - так:wxpython sizers - действительно ли WX.EXPAND делает разницу в расположении?

horizontal_sizer.Add(someControl, 0, wx.LEFT, border) 

становится:

horizontal_sizer.Add((border, 0)) 
horizontal_sizer.Add(someControl) 

В приведенном выше случае я уверен, что они полностью эквивалентны. Однако, если wx.EXPAND и не равен нулю доля определяется как в:

horizontal_sizer.Add(someControl, proportion, wx.LEFT | wx.EXPAND, border) 

это ниже:

horizontal_sizer.Add((border, 0)) 
horizontal_sizer.Add(someControl, proportion, wx.EXPAND) 

полностью эквивалентна выше? Визуально они кажутся одинаковыми, но есть ли что-нибудь, чего я не вижу? Другими словами, wx.EXPAND влияет на границу, и если да, то как?

Конечно, приведенные выше примеры являются тривиальными, но в сложных компоновках sizers приведенное выше преобразование (как предлагается в учебнике) значительно упрощает код и выделяет общие шаблоны пользовательского интерфейса, которые были нечитабельны в беспорядке флагов OR'ed и числа.

EDIT: обратная связь по правильному пути добавления разделителя будет оценена по достоинству. Например, я видел here:

mainSizer.Add(wx.StaticText(self), 0, wx.EXPAND) # add a "spacer" 

или в коде поддерживать люди:

horizontal_sizer.Add((0, 0), 1) # which seems equivalent to Add((0, 0)) 

Сейчас в питон должен быть одно-- и предпочтительно только один --obvious способ сделать это - здесь есть как минимум 4 - так оценили некоторые отзывы экспертов.

ответ

1

Да, значения пропорций и флаг wx.EXPAND применяются к разделителям так же, как и для виджетов. Минимальное значение элемента должно быть размером, которое оно было задано при добавлении разделителя (вместо того, чтобы быть свойством виджетов, как обычно). Вы можете легко реализовать некоторые красиво изменяющиеся макеты с расширяемыми sizers.

Использование wx.StaticText в качестве проставки работает, но кажется мне расточительным, поскольку нет необходимости иметь там виджет, если только вам не нужно делать что-то особенное с ним, например, устанавливать ярлык позже или что-то в этом роде. Я определенно не назвал бы это spacer, хотя это виджет, который в настоящий момент пуст.

Некоторые из более чем один способ сделать это произошли из-за небольшой эволюции C++ API с течением времени и хотят поддерживать обратную совместимость, а также немного pythonization для оболочек. Однако он менее беспорядочен, чем на какое-то время, и хорошей новостью является то, что он хорошо документирован в документах Phoenix. То, что документировано, должно быть совместимо с Classic, и будет продолжать работать с Phoenix в будущем.

https://wxpython.org/Phoenix/docs/html/wx.Sizer.html

Кстати, вы не упомянуть удобные методы AddSpacer и AddStretchSpacer, так что добавьте еще один способ сделать это к списку. ;-) Однако они помогают справляться со значениями, так что это приятное дополнение.

+0

Также я не совсем понимаю, о чем вы говорите: «Минимальное значение элемента должно быть размером, которое оно было задано при добавлении разделителя (вместо того, чтобы быть свойством такого виджетов, как обычно». -> Вы могли бы пояснить, что бит? –

+0

['AddStretchSpacer'] (https://wxpython.org/Phoenix/docs/html/wx.Sizer.html#wx.Sizer.AddStretchSpacer) заставило меня понять, что параметр пропорции вступает в силу, даже если флаг EXPAND not defined_. Это новость для меня (и объясняет, почему люди делают 'horizontal_sizer.Add ((0, 0), 1)' - это на самом деле эквивалентно AddStretchSpacer. Так почему же существует параметр EXPAND, если достаточно доли, чтобы увеличить размер sizer (backward compat, я думаю). AddSpacer OTOH не поощряется в turorial: https://wiki.wxpython.org/BoxSizerFromTheGroundUp/ControlsPadding –

+0

Я действительно пошел дальше и разместил это: https://groups.google.com/forum/# ! тема/WxPython пользователи/uPlSsjiV4zY. Sizers - одна из областей, в которой wx не поддерживает принцип «одного правильного пути» python, и я действительно, действительно, _really_ удовольствие от этого принципа :) Может быть, время для новой статьи wiki (я проходил, и это нужна какая-то любовь)? –

 Смежные вопросы

  • Нет связанных вопросов^_^