PyQtでのQGraphicsViewとQGraphicsSceneの大きさの関係がよくわかりません。
Python3
1import sys 2from PyQt5.QtWidgets import * 3from PyQt5.QtGui import * 4from PyQt5.QtCore import * 5 6class Example(QGraphicsItem): 7 def __init__(self, width=400, height=400): 8 super(Example, self).__init__() 9 10 self.width = width 11 self.height = height 12 self.x_origin = width / 2 13 self.y_origin = height / 2 14 self.scale = 20 15 16 def paint(self, painter, option, widget): 17 painter.setPen(Qt.black) 18 painter.drawLine(0, self.y_origin, self.width, self.y_origin) 19 painter.drawLine(self.x_origin, 0, self.x_origin, self.height) 20 print("paint") 21 22 for i in range(100): 23 x = self.x_origin + i * self.scale 24 y = self.y_origin + i * self.scale 25 painter.setPen(Qt.black) 26 painter.setBrush(QBrush(Qt.red, Qt.SolidPattern)) 27 painter.drawEllipse(QPointF(x, y), 9, 9) 28 29 def boundingRect(self): 30 return QRectF(0, 0, self.width, self.height) 31 32 def setScale(self, x): 33 self.scale = x 34 35 def getScale(self): 36 return self.scale 37 38 def repaint(self): 39 self.update() 40 41class MyWindow(QMainWindow): 42 def __init__(self): 43 super().__init__() 44 self.initUI() 45 46 def initUI(self): 47 self.setGeometry(0, 0, 600, 500) 48 self.setWindowTitle("Ex") 49 50 self.setWindow() 51 52 self.show() 53 54 def setWindow(self): 55 self.w = QWidget() 56 57 self.view = QGraphicsView() 58 self.scene = QGraphicsScene(self.view) 59 self.srect = self.view.rect() 60 width = self.srect.width() 61 height = self.srect.height() 62 self.scene.setSceneRect(QRectF(self.srect)) 63 self.graph = Example(width, height) 64 self.scene.addItem(self.graph) 65 self.view.setScene(self.scene) 66 67 label = QLabel(" X ") 68 self.box = QLineEdit() 69 x = self.getScale() 70 self.box.setText("{}".format(x)) 71 update = QPushButton('Update') 72 update.clicked.connect(self.setScale) 73 74 main = QGridLayout() 75 76 main.addWidget(self.view, 0, 0, 30, 5) 77 main.addWidget(label, 0, 10, 1, 3) 78 main.addWidget(self.box, 1, 10, 1, 3) 79 main.addWidget(update, 2, 10, 1, 3) 80 81 self.w.setLayout(main) 82 self.setCentralWidget(self.w) 83 84 def getScale(self): 85 return self.graph.getScale() 86 87 def setScale(self): 88 self.x = int(self.box.text()) 89 self.graph.setScale(self.x) 90 self.graph.repaint() 91 92def main(): 93 app = QApplication(sys.argv) 94 gui = MyWindow() 95 sys.exit(app.exec_()) 96 97 98if __name__ == '__main__': 99 main()
現在、以上のような構成でウィンドウを作成していみているのですが、円が見切れる形になっております。
ここで表示されているスクロールバーは、恐らく設定されているviewの大きさ分しか動かすことができないということだと思うのですが、すべての円を表示するためにはどのようにすればよいのでしょうか?
また、右側で用意しているテキストボックスを使用して、円と円の間隔を変えるようにした場合、動的にスクロールバーの長さを変更するようなことはできるのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/09 04:32 編集
2018/10/09 04:39 編集
2018/10/09 04:43
2018/10/09 04:49
2018/10/09 05:04
2018/10/09 06:04