首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除或替换PyVista窗口图标?

如何删除或替换PyVista窗口图标?
EN

Stack Overflow用户
提问于 2022-08-29 15:48:37
回答 1查看 81关注 0票数 1

如何删除或更改PyVista呈现窗口的图标?我也试图从文档中搜索这个问题,但没有找到任何答案。

EN

回答 1

Stack Overflow用户

发布于 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机器上:分段错误)。

下面是一个小例子:

代码语言:javascript
复制
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”。我不知道这是为什么,但我也会试着看看我们能否解决这个问题。)

不透明处理似乎也有效:

代码语言:javascript
复制
# 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()

使用此图标,窗口开关如下所示:

它看起来很奇怪,但这仅仅是因为不透明模式本身就很古怪。透明显示为切换器的半透明背景颜色在我的系统上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73531355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档