1

私は、スクロールされたウィンドウに配置され、ウィンドウ内で自由に移動およびサイズ変更できるウィジェットコンテナー (まだ python 2.7 および gtk2) を開発したいと考えていました。窓; ウィジェットのコーナー/エッジがウィンドウに表示されている場合、サイズ変更用のドラッグ ハンドルが表示されます。それ以外の場合、ウィンドウ領域よりも大きい場合は、中クリックで拡大および縮小 (ズームインおよびズームアウト) されます。

もちろん、このウィジェットのカスタム コーディングの量を最小限に抑えたいので、最初に gtk2 で利用できるものを調べました。サイズ変更ドラッグ ハンドルを公開している唯一の要素は gtk.Window であることが判明しました。それ以外の場合、ウィンドウがウィジェット内に配置されている場合、そのサイズは明らかにウィジェットによって設定されているため、ドラッグ ハンドルはありません (メニュー、タイトルバーなどではありません)。私はこれがなぜなのかをさまよっていました-そして、gtk開発者によって悪と見なされているマルチドキュメントインターフェイス(MDI)が原因のようです。たとえば、Re:[gtk-list] Resizing widgets with a mouseまたはDoes GTK support MDI? - Linux/BSD whirlpool.net.au

私が望む動作を実証するために、Python PyQt/PySide QMdiArea subwindows scroll not working in TabbedView - Stack Overflowの PyQt4 コードを使用しました。その要点は次のとおりです-コーナーが表示されている場合、サイズ変更ドラッグハンドルが表示され、サイズ変更ドラッグアクションを開始できます。

qtdrag1

このようにウィンドウの外側の角をドラッグすると、スクロールバーが自動的に内側のウィジェットの新しいサイズ/位置を示します (以下のスクリーンショットではウィンドウも少し移動していることに注意してください。これは手動で意図的ではありません)。

qtdrag2

繰り返しますが、ウィンドウ (タイトルバーやメニューなど) は実際には必要ありません。このように動作するウィジェット コンテナーだけなので、状況に応じてテーブル (TreeView など) や画像を配置できます。 - 少なくとも「外側」のスクロールバーを再計算することについて心配する必要はありません (当然、残りのカスタム動作を自分でコーディングする必要があると思います)。また、今のところ、そのようなウィンドウに配置された単一のウィジェットが必要です (したがって、「複数のドキュメント」はありません)。

Qt はある意味でこれを提供しているように見えますが、私は今のところ、このようなことを行うレベルに到達する可能性はありません。同じことが WxWindows にも当てはまります (たとえば、wxPython-users - ウィジェットのサイズを変更する方法を参照してください- 可能ですが、そこにはコードがないため、ジオメトリ計算コーディングが必要かどうかはわかりません)。

だから私は疑問に思っていました-見逃したかもしれないウィジェットがあり、それは上記の動作を実装し、カスタマイズのベースとして取ることができますか? そうでない場合、gtk2 (最終的には Python) で上記のようなものを実装するために必要なオプションは何ですか?

4

1 に答える 1

0

これが機能するかどうかはわかりませんが、調べることをお勧めしGtkOffscreenWindowます。内側のウィジェットをその中に入れて、それを a のGtkDrawingArea中にレンダリングしますGtkScrolledWindow。これにより、描画領域のサイズに応じて、スクロールバーが適切に動作する可能性があります。

あなたが得られないもの:

  • ウィンドウ タイトルバーは、ウィンドウ マネージャーの一部であるため、GTK は認識しないため、自分でレンダリングする必要があります。(注: Qt の例の内側のウィンドウには、外側のウィンドウとは異なるタイトルバーがあります。これは同じことだと思います。)
  • ハンドルをドラッグしてウィンドウのサイズを変更するには、予想どおり、自分でコーディングする必要があります。

また、Glade GUI デザイナーがこれをどのように行うかを確認することもできます。

于 2013-11-11T08:30:53.890 に答える