Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make vertical layout the default #124

Merged
merged 2 commits into from
Jan 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions magicgui/backends/_qtpy/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ def __init__(self):
def _mgui_get_value(self):
try:
return self._qwidget.dateTime().toPython()
except TypeError:
except (TypeError, AttributeError):
return self._qwidget.dateTime().toPyDateTime()


Expand All @@ -512,7 +512,7 @@ def __init__(self):
def _mgui_get_value(self):
try:
return self._qwidget.date().toPython()
except TypeError:
except (TypeError, AttributeError):
return self._qwidget.date().toPyDate()


Expand All @@ -523,7 +523,7 @@ def __init__(self):
def _mgui_get_value(self):
try:
return self._qwidget.time().toPython()
except TypeError:
except (TypeError, AttributeError):
return self._qwidget.time().toPyTime()


Expand Down
7 changes: 4 additions & 3 deletions magicgui/widgets/_bases/container_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class ContainerWidget(Widget, _OrientationMixin, MutableSequence[Widget]):

def __init__(
self,
layout: str = "horizontal",
layout: str = "vertical",
widgets: Sequence[Widget] = (),
labels=True,
return_annotation: Any = None,
Expand Down Expand Up @@ -218,8 +218,9 @@ def _unify_label_widths(self, event=None):
measure(w.label) for w in self if not isinstance(w, ButtonWidget)
)
for w in self:
if hasattr(w, "label_width"):
w.label_width = widest_label # type: ignore
labeled_widget = w._labeled_widget()
if labeled_widget:
labeled_widget.label_width = widest_label

@property
def margins(self) -> Tuple[int, int, int, int]:
Expand Down
22 changes: 13 additions & 9 deletions magicgui/widgets/_bases/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class Widget:

_widget: _protocols.WidgetProtocol
# if this widget becomes owned by a labeled widget
_labeled_widget: Optional["ReferenceType[_LabeledWidget]"] = None
_labeled_widget_ref: Optional["ReferenceType[_LabeledWidget]"] = None

def __init__(
self,
Expand Down Expand Up @@ -249,14 +249,18 @@ def tooltip(self, value: Optional[str]) -> None:
"""Set the tooltip for this widget."""
return self._widget._mgui_set_tooltip(value)

def _labeled_widget(self) -> Optional[_LabeledWidget]:
"""Return _LabeledWidget container, if applicable."""
return self._labeled_widget_ref() if self._labeled_widget_ref else None

def show(self, run=False):
"""Show the widget."""
self._widget._mgui_show_widget()
self.visible = True
if self._labeled_widget is not None:
w = self._labeled_widget()
if w:
w.show()

labeled_widget = self._labeled_widget()
if labeled_widget is not None:
labeled_widget.show()
if run:
self.__magicgui_app__.run()
return self # useful for generating repr in sphinx
Expand All @@ -274,10 +278,10 @@ def hide(self):
"""Hide widget."""
self._widget._mgui_hide_widget()
self.visible = False
if self._labeled_widget is not None:
w = self._labeled_widget()
if w:
w.hide()

labeled_widget = self._labeled_widget()
if labeled_widget is not None:
labeled_widget.hide()

def render(self) -> "np.ndarray":
"""Return an RGBA (MxNx4) numpy array bitmap of the rendered widget."""
Expand Down
5 changes: 2 additions & 3 deletions magicgui/widgets/_concrete.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,10 +510,9 @@ def __init__(
position: str = "left",
**kwargs,
):
layout = "horizontal" if position in ("left", "right") else "vertical"
kwargs["backend_kwargs"] = {"layout": layout}
kwargs["layout"] = "horizontal" if position in ("left", "right") else "vertical"
self._inner_widget = widget
widget._labeled_widget = ref(self)
widget._labeled_widget_ref = ref(self)
self._label_widget = Label(value=label or widget.label, tooltip=widget.tooltip)
super().__init__(**kwargs)
self.parent_changed.disconnect() # don't need _LabeledWidget to trigger stuff
Expand Down
2 changes: 1 addition & 1 deletion magicgui/widgets/_function_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def __init__(
self,
function: Callable[..., _R],
call_button: Union[bool, str] = False,
layout: str = "horizontal",
layout: str = "vertical",
labels: bool = True,
tooltips: bool = True,
app: AppRef = None,
Expand Down
4 changes: 2 additions & 2 deletions tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,9 @@ def test_container_widget():
with pytest.raises(NotImplementedError):
container[0] = "something"

assert container.layout == "horizontal"
assert container.layout == "vertical"
with pytest.raises(NotImplementedError):
container.layout = "vertical"
container.layout = "horizontal"

assert all(x in dir(container) for x in ["labela", "labelb"])

Expand Down