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