質問: 以下、PyQt自体に対する理解が足りず、分かりにくい質問になってしまい申し訳ありません。 QgraphicsViewという枠の中にQgrtaphicsSceneがあり、その中にQgraphicsItemを設置する、というように理解しております。 現在、CSVファイルから取得した座標をPyQtで作成した座標平面にプロットするようなものを考えており、実際に点をプロットすることまではできています。 QgraphicsViewの大きさよりもQgrtaphicsSceneの大きさを大きく設定しており、座標の値が大きくなると、座標平面から見切れてしまう点がある状態です。 このような場合、スクロールバーを設置して、すべての点が見えるようにする、というような処理はできないのでしょうか? QgraphicsViewのscale()メソッドを使用して倍率を小さくすると、見切れていた点も含めて全体を表示させることができます。 また、読み込むファイルによっては最大値が異なるため、その都度スクロールバーの長さ(?)が変えられるようにしたいと考えております。 このような処理はPyQtで実現できるのでしょうか?
回答: Qt のライブラリの話ですね。 QGraphicsScene::sceneRect() でシーンの大きさを取得できるので、それを QGraphicsView::fitInView() に設定することでシーン全体が表示されるようにスケールされます。 また、QGraphicsScene::sceneRectChanged() というシーンの大きさが変更されたときに送出されるシグナルがあるので、それをスロット関数に結びつけ、その中で QGraphicsView::fitInView() に設定すると、大きさの変更に応じて自動でスケールされると思います。 ``` このような場合、スクロールバーを設置して、すべての点が見えるようにする、というような処理はできないのでしょうか? ``` QGraphcisView は設定しているシーンがウィジェットの大きさを超えたら、自動でスクロールバーが表示されたはずです。 SceneRect について * シーンの大きさを表す。 * QGraphicsView の表示範囲にも使われる。 * SceneRect を設定していない場合は、アイテムを追加するとそれが収まるように自動で拡張される。 * ただし、アイテムを削除しても一度拡張された大きさは自動でもとには戻らない。 * QGraphicsScene::itemsBoundingRect() ですべてのアイテムが収まる矩形の大きさを取得し、setSceneRect() でシーンの大きさを設定することでアイテムがすべて収まる大きさに設定できる。