You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QWidget窗口右下角添加400×300尺寸的QGraphicsView图表

Add QGraphicsView to PyQt6 QWidget (Bottom-Right, 400x300)

1. Import Dependencies

Add these imports to your existing code:

from PyQt6.QtWidgets import (QGraphicsView, QGraphicsScene, QGraphicsRectItem,
                             QGraphicsLineItem, QGraphicsEllipseItem, QSpacerItem,
                             QSizePolicy)
from PyQt6.QtGui import QPen, QBrush, QPainter
from PyQt6.QtCore import Qt

2. Initialize QGraphicsView and Scene

Add a method to your main window class to set up the graphics view with fixed dimensions:

def setup_graphics_view(self):
    # Create view with fixed 400x300 size
    self.graphics_view = QGraphicsView()
    self.graphics_view.setFixedSize(400, 300)
    
    # Create scene (drawing canvas) and attach to view
    self.scene = QGraphicsScene()
    self.graphics_view.setScene(self.scene)
    
    # Optional: Improve rendering quality and appearance
    self.scene.setBackgroundBrush(QBrush(Qt.GlobalColor.lightGray))
    self.graphics_view.setRenderHint(QPainter.RenderHint.Antialiasing)

3. Integrate into Main Layout

Assuming your main window uses a QVBoxLayout for core content, nest a QHBoxLayout to position the view at the bottom-right:

def __init__(self):
    super().__init__()
    self.setWindowTitle("Pathfinding App")
    self.resize(800, 600)
    
    # Existing UI elements (obstacles, start/end, timer label)
    self.timer_label = QLabel("Time: 0s")
    # ... add other existing widgets ...
    
    # Set up graphics view
    self.setup_graphics_view()
    
    # Main layout configuration
    self.main_layout = QVBoxLayout()
    
    # Add existing UI to main layout
    self.main_layout.addWidget(self.timer_label)
    # ... add other widgets ...
    
    # Bottom layout to push view to right
    self.bottom_layout = QHBoxLayout()
    self.bottom_layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum))
    self.bottom_layout.addWidget(self.graphics_view)
    
    self.main_layout.addLayout(self.bottom_layout)
    self.setLayout(self.main_layout)

4. Draw on the Scene

All drawing operations are performed on the QGraphicsScene. Example code to add shapes (call this method after scene setup):

def draw_sample_chart(self):
    self.scene.clear()  # Reset scene
    
    # Blue rectangle
    rect = QGraphicsRectItem(50, 50, 100, 80)
    rect.setBrush(QBrush(Qt.GlobalColor.blue))
    self.scene.addItem(rect)
    
    # Red line
    line = QGraphicsLineItem(0, 0, 300, 200)
    line.setPen(QPen(Qt.GlobalColor.red, 2))
    self.scene.addItem(line)
    
    # Green data points
    for x in range(0, 300, 50):
        point = QGraphicsEllipseItem(x-2, 150-2, 4, 4)
        point.setBrush(QBrush(Qt.GlobalColor.green))
        self.scene.addItem(point)

5. Dynamic Updates

To refresh the chart during runtime (e.g., as pathfinding progresses), use a method like this:

def update_chart(self, data):
    self.scene.clear()
    # Example: Draw time-series bars
    for idx, value in enumerate(data):
        bar = QGraphicsRectItem(idx * 40, 300 - (value * 2), 30, value * 2)
        bar.setBrush(QBrush(Qt.GlobalColor.orange))
        self.scene.addItem(bar)

Alternative: QGridLayout Integration

If your main window uses a QGridLayout, place the view directly in the bottom-right corner with alignment:

# Replace bottom_layout code with this
# Assuming existing content ends at row 2, column 1
self.main_layout.addWidget(self.graphics_view, 3, 2, 
                           alignment=Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)

Key Notes

  • Scene vs View: The QGraphicsScene manages all drawing items; QGraphicsView is just the display surface. All modifications target the scene.
  • Fixed Dimensions: setFixedSize(400,300) ensures the view maintains your requested size regardless of window resizing.
  • Layout Best Practices: Use layouts instead of manual positioning to ensure consistent behavior across window sizes.

内容的提问来源于stack exchange,提问作者DSA5252

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:25:10