如何删除或更改PyVista呈现窗口的图标?我也试图从文档中搜索这个问题,但没有找到任何答案。
发布于 2022-08-29 21:57:15
目前在PyVista中不直接支持这一点,但是这是一个很好的想法,我将打开一个拉请求来实现这个一旦完成渲染窗口的主要重构。
同时,您可以使用原始VTK (渲染窗口上的SetIcon()方法)。但是,根据这些文档,这只适用于Windows和Linux。
从PyVista 0.36.1开始,您可以直接访问plotter.ren_win,这是一个VTK呈现窗口对象。根据文档,图标应该是vtkImageData;在实际的PyVista术语中,这意味着具有维度(n, m, 1)的UniformGrids。
一些实验表明,图标必须具有形状为uint8的(n_points, 3)或(n_points, 4)的活动标量,但我只能在使用后一种设置的情况下使图标在我的linux计算机上实际显示。似乎非方形图标被平铺成方形形状,所以你必须首先将你的图像裁剪成方形形状。最后,您需要在设置图标之前调用ren_win.Render(),否则就会出现问题(在我的linux机器上:分段错误)。
下面是一个小例子:
import numpy as np
import pyvista as pv
from pyvista import examples
# example icon: cropped puppy mesh turned from RGB to RGBA
icon = examples.download_puppy().extract_subset([0, 1199, 0, 1199, 0, 0])
data = np.empty((icon.n_points, 4), dtype=np.uint8)
data[:, :-1] = icon.point_data['JPEGImage']
data[:, -1] = 255 # pad with full opacity
icon.point_data['JPEGImage'] = data
# create a plotter with a dummy mesh and set its icon
plotter = pv.Plotter()
plotter.add_mesh(pv.Dodecahedron())
ren_win = plotter.ren_win # render window
ren_win.Render() # important against segfault
ren_win.SetIcon(icon)
plotter.show()下面的面板如下所示:

它也适用于我的窗口开关:

(有趣的是,标题栏中的窗口标题是"PyVista“,这是pyvista.Plotter.__init__()中的默认title,但在窗口开关中我看到了"Vtk”。我不知道这是为什么,但我也会试着看看我们能否解决这个问题。)
不透明处理似乎也有效:
# add opacity in a nontrivial pattern
i, j = np.indices(icon.dimensions[:-1])
alpha = ((np.sin(2*i/icon.dimensions[0]*2*np.pi) * np.cos(j/icon.dimensions[1]*2*np.pi)) * 255).round().astype(np.uint8)
icon.point_data['JPEGImage'][:, -1] = alpha.ravel()使用此图标,窗口开关如下所示:

它看起来很奇怪,但这仅仅是因为不透明模式本身就很古怪。透明显示为切换器的半透明背景颜色在我的系统上。
https://stackoverflow.com/questions/73531355
复制相似问题