1

MATLAB 2012a を実行していますが、厄介な回避策に頼らなければ完全に解決できない問題が発生しています。私は現在、ポップアップ メニューから値を選択すると、プライマリ フィギュアと子の uicontrols の高さを変更する GUI に取り組んでいます。以下は、メインの Figure の高さを更新するために使用されるコードを表しています。

% Update the figure height: [x y height width]
Position = get(handles.mainfigure, 'Position');
Position(4) = Position(4) + heightDelta;
set(handles.output, 'Position', Position)

ただし、Figure の高さが変更されると、すべての uicontrols が対応する方向に移動します。つまり、高さが増加するとすべての子が下に移動し、高さが減少するとすべての子が上に移動します。これは、単位が「正規化」以外の場合に適用されます (それ自体はさらに不安定です)。

同じデルタで子を反対方向にシフトすることでこれを簡単に回避できますが、uicontrols の位置に影響を与えずに図の高さを変更する方法はありますか? GUIDE で高さを変更する場合、この動作は発生しません。むしろ、コールバック イベント中にのみ表示されます。

「正規化された」単位では、一部のコントロールを上に移動し、一部のコントロールを下に移動しながら、テーブルの高さも変更します。なぜこれが起こっているのかわかりません。誰かが光を当てることができれば、私はそれを大いに感謝します.

4

1 に答える 1

1

Figure の子の位置は、Figure の左下隅を基準にしています。したがって、Figure の高さを大きくすると、uicontrols は Figure の下部から同じ距離にとどまり、下に移動しているように見えます。

uicontrol の単位が正規化されると、uicontrol 間のスペースを含むすべてが比例して引き伸ばされ、上半分の uicontrol が上に移動し、下半分の uicontrol が下に移動するように見えます。

グラフィカル オブジェクトの位置を定義する方法からすると、すべての uicontrol の位置を変更する以外にできることはほとんどありません。

于 2012-09-08T23:48:44.827 に答える