- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 TextItem,它在缩放 y 轴的同时在图形上保持恒定位置,本质上与图例相同的功能仅作为 TextItem,我可以根据需要更改文本。我无法弄清楚如何做到这一点。欢迎任何建议。
这个例子说明了这个问题。在左侧图上,缩放 y 轴会导致文本移动,而在右侧图上,图例在您缩放时保持在恒定位置。我希望 textItem 的位置像图例位置一样被定义为相对于图形窗口的恒定位置。或者,如果有人知道如何更改图例的格式并更新同样有效的文本,但从我对文档的阅读来看,这是不可能的。
import pyqtgraph as pg
from PyQt4 import QtGui
import numpy as np
import sys
def main():
app = QtGui.QApplication(sys.argv)
widg = QtGui.QWidget()
widg.move(100, 100)
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
pgWidg = pg.GraphicsLayoutWidget()
pgWidg.resize(750, 250)
graph1 = pgWidg.addPlot(row=1, col=1)
graph2 = pgWidg.addPlot(row=1, col=2)
curve1 = graph1.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k')
curve2 = graph2.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k')
graph1.addItem(curve1)
graph2.addItem(curve2)
graph1.setMouseEnabled(x=False, y=True)
graph2.setMouseEnabled(x=False, y=True)
graph1Text = pg.TextItem(text = 'A1', color=(0, 0, 0))
graph1.addItem(graph1Text)
graph1Text.setPos(150, 1)
legend = graph2.addLegend()
style = pg.PlotDataItem(pen='w')
legend.addItem(style, 'A2')
grid = QtGui.QGridLayout()
grid.addWidget(pgWidg, 0,0)
widg.setLayout(grid)
widg.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
最佳答案
现在这是一个有点老的问题 - 希望这会对某人有所帮助。回答这个问题帮助我回答了我自己的问题。
请注意,我使用的是 PySide2 而不是 PyQt4 - 我认为这与 PyQt4 没有显着不同。我也在使用 pyqtgraph 0.11.1。
LegendItem 有一个 getLabel() 方法,它返回给定 plotItem 的图例内的 LabelItem。这应该允许你做你想做的。
您使用以下代码创建了您的图例:
legend = graph2.addLegend()
style = pg.PlotDataItem(pen='w')
legend.addItem(style, 'A2')
然后,您可以使用以下命令获取 labelitem:
legend_labelitem = legend.getLabel(style)
有了它,您应该能够更改属性 - 例如使用 .setText() 设置新的图例文本:
legend_labelitem.setText('Something else')
完整的代码最终会是这样的:
import pyqtgraph as pg
# from PySide2 import QtGui # <---- tested with this
from PyQt4 import QtGui
import numpy as np
import sys
def main():
app = QtGui.QApplication(sys.argv)
widg = QtGui.QWidget()
widg.move(100, 100)
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
pgWidg = pg.GraphicsLayoutWidget()
pgWidg.resize(750, 250)
graph1 = pgWidg.addPlot(row=1, col=1)
graph2 = pgWidg.addPlot(row=1, col=2)
curve1 = graph1.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k')
curve2 = graph2.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k')
graph1.addItem(curve1)
graph2.addItem(curve2)
graph1.setMouseEnabled(x=False, y=True)
graph2.setMouseEnabled(x=False, y=True)
graph1Text = pg.TextItem(text = 'A1', color=(0, 0, 0))
graph1.addItem(graph1Text)
graph1Text.setPos(150, 1)
legend = graph2.addLegend()
style = pg.PlotDataItem(pen='w')
legend.addItem(style, 'A2')
legend_labelitem = legend.getLabel(style) # <---------
legend_labelitem.setText('Something else') # <---------
grid = QtGui.QGridLayout()
grid.addWidget(pgWidg, 0,0)
widg.setLayout(grid)
widg.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
它产生这个:
关于python - pyqtgraph:在缩放时保持 TextItem 的恒定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741734/
我正在尝试绘制一个包含文本的矩形。这是我的一段代码 QGraphicsRectItem *rectangle=new QGraphicsRectItem(75,50,30,40); QGraphics
我想将 PreferenceActivity 用于我的游戏设置。但我想添加到该列表中,以便在列表中的设置项之后,只有文本项,如“MyGame,版本 0.1”或可点击的文本项“评价我的应用程序”等。 执
我想要一个 TextItem,它在缩放 y 轴的同时在图形上保持恒定位置,本质上与图例相同的功能仅作为 TextItem,我可以根据需要更改文本。我无法弄清楚如何做到这一点。欢迎任何建议。 这个例子说
我有以下TextItem: final TextItem txtFromAmt = new TextItem(); txtFromAmt.setWrapTitle(false); txtFromAmt
我正在使用 PaperJS 制作一个 Canvas 应用程序,该应用程序生成气球,每个气球内有文本。不过,我希望允许用户将每个气球内的文本编辑为他们想要的内容。 是否可以允许用户像 HTML 文本输入
我正在使用 pyqtgraph 在我放置一些文本的地方绘制图形(例如数据的最大值......) 我的问题是如何知道 TextItem 输入的大小(高度、宽度)?这是为了控制它的位置,避免在窗外。 例如
我正在尝试使用 pyqtgraph 来绘制多个项目,但不幸的是,当我尝试将 TextItem 添加到 Viewbox 时,它只显示了几秒钟,然后就消失了。任何人都有想法,如何永久修复 TextItem
我知道我可以 scale一个Raster Paper.js 中的对象, 以及 TextItem和一个 Path . 但是,我想在拖动 Raster 的选择线或边界框时执行此操作, TextItem ,
在 PyQtGraph 中创建要添加到 plotItem 的 TextItem 时,我知道可以使用 html 代码格式化文本,但是我想知道在通过 TextItem 更新文本时如何格式化文本(即更改字体
我使用 Google Form Builder 创建了一个表单,然后为其添加了一个脚本。 我可以运行 Session.getEffectiveUser().getEmail() 到响应者的电子邮件地址
我想将 TextItem 组件添加到 SmartGwt 中的 HLayout 中。我只想避免将每个组件添加到 DynamicForm 然后添加到 Layout相反,我想直接将 TextItem 添加到
我有一个 DynamicForm,其中包含多个包含数值(欧元)的 TextItem。需要添加一个复选框,用于将 TextItem 的 View 模式从欧元切换到数千欧元并返回(我们将其称为“以千为单位
自 PyQtGraph 0.10.0 版本以来,我在图中的 TextItems 方面遇到了问题:我有一个启用了自动缩放功能的图表(PlotItem)和一个 TextItem。在某些情况下,自动缩放会尝
我是一名优秀的程序员,十分优秀!