- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的窗口中有一个主小部件,其中包含很多小部件。如何在该小部件中插入 QGraphics View 和 QGraphicsScene?我还没有找到直接插入的方法,所以我尝试使用包装器,在本例中是盒子布局,但这不是一个好的解决方案。 QGraphicsScene 在布局限制中脱颖而出。
代码:
class UiVentana(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedSize(1500, 1015)
widget_central = QtWidgets.QWidget(self)
wrapper = QtWidgets.QHBoxLayout(widget_central)
scene = QtWidgets.QGraphicsScene(wrapper)
vista = QtWidgets.QGraphicsView(scene)
wrapper.addWidget(vista)
self.diedrico = Diedrico() # This is a class who draw things, not relevant
self.diedrico.setFixedSize(2000, 2000)
scene.addWidget(self.diedrico)
self.setCentralWidget(widget_central)
我想得到这个结果:
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPen, QColor
import sys
class Diedrico(QWidget):
def __init__(self, parent):
super().__init__(parent)
def paintEvent(self, event):
qp = QPainter(self)
qp.setPen(QPen(QColor(Qt.black), 5))
qp.drawRect(500, 500, 1000, 1000)
class UiVentana(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(UiVentana, self).__init__(parent)
self.resize(520, 520)
self.widget_central = QtWidgets.QWidget(self)
scrol = QtWidgets.QScrollArea(self.widget_central)
scrol.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scrol.setGeometry(QtCore.QRect(30, 30, 500, 500))
scrol.setWidgetResizable(False)
contenido = QtWidgets.QWidget()
contenido.setGeometry(QtCore.QRect(0, 0, 2000, 2000))
scrol.setWidget(contenido)
self.Diedrico = Diedrico(contenido)
self.Diedrico.setGeometry(QtCore.QRect(0, 0, 2000, 2000))
self.setCentralWidget(self.widget_central)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = UiVentana()
ui.show()
sys.exit(app.exec_())
但是使用 QGraphics 而不是滚动区域
最佳答案
使用窗口小部件创建的 QGraphicsProxyWidget 会考虑窗口小部件的最小尺寸来设置边界矩形,而 QGraphicsScene 使用边界矩形来设置初始场景矩形。
from PyQt5 import QtCore, QtGui, QtWidgets
class Diedrico(QtWidgets.QWidget):
def paintEvent(self, event):
qp = QtGui.QPainter(self)
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.black), 5)
qp.setPen(pen)
qp.drawRect(500, 500, 1000, 1000)
def minimumSizeHint(self):
return QtCore.QSize(2000, 2000)
class UiVentana(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(UiVentana, self).__init__(parent)
self.resize(520, 520)
widget_central = QtWidgets.QWidget()
self.setCentralWidget(widget_central)
lay = QtWidgets.QVBoxLayout(widget_central)
scene = QtWidgets.QGraphicsScene(self)
view = QtWidgets.QGraphicsView(scene)
diedrico = Diedrico()
scene.addWidget(diedrico)
lay.addWidget(view)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = UiVentana()
ui.show()
sys.exit(app.exec_())
关于python - 在小部件中嵌入 QGraphics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57946188/
我的窗口中有一个主小部件,其中包含很多小部件。如何在该小部件中插入 QGraphics View 和 QGraphicsScene?我还没有找到直接插入的方法,所以我尝试使用包装器,在本例中是盒子布局
例如,如果我想使用 QGraphicsView 在游戏中显示玩家的库存,我如何强制执行基于网格的 View ,其中拖放项目始终会导致它们与网格? 最佳答案 您可以在QGraphicsScene子类中处
[1/2] 背景 您好! Qt 为我们提供了创建高度自定义图形项目的方法。我们需要做的就是继承自 QGraphicsItem 并覆盖纯虚拟的 boundingRect() 函数。此外,我们可以选择性地
我画多条线 line = scene->addLine(x1, y1, x2, x2, Pen); 现在我想在线条的中间添加一个标签(例如椭圆或三角形。椭圆可能是简单的解决方案) 我的想法是为 Y (
我想使用 sqlalchemy 使 QGraphicsItem 持久化。轻松地将 Base 类与 PySide 类组合会产生有关元类的错误。元类主题是 Python 的魔力,当不需要时我不想深入研究它
我正在使用 Qt 的图形 View 框架可视化图形。它看起来像这样: 现在,我希望顶点的大小(我将其绘制为小的实心圆)相对于 View 的缩放保持不变。目前,我通过不将顶点作为场景中的项目来实现这一点
我目前有一个与 QGraphicsGridLayout 一起使用的 QGraphicsScene。我正在尝试在此网格布局上对齐 QWidgets(QLabel 和自定义图形 QWidget),然后将其
我遇到了一个非常令人沮丧的问题,试图删除我的应用程序中的 qgraphicsitems。我有一个菜单 Controller ,负责将按钮添加到布局并将它们添加到场景中。这些按钮都与自定义信号和槽相连。
一些背景 - 假设您有 QGraphicsScene,并且只有一个 View ,它与场景成 1-1 比例。 你有一个 QRect A,它代表场景的外部 View ,具有预定义的像素大小。 你有一个 Q
我是一名优秀的程序员,十分优秀!