Vispy坐标轴初始位置异常,平移/缩放后恢复正常的问题求助
Vispy坐标轴初始位置异常,平移/缩放后恢复正常的问题求助
大家好,我遇到了一个Vispy嵌入Qt后的坐标轴显示问题,想请教一下各位:
我尝试给图像添加X、Y坐标轴,但初始加载时坐标轴的信息显示是错误的;不过只要对图像执行一次平移或者缩放操作,坐标轴就会立刻显示正常。
我基于Vispy官方的「Embed Vispy into QT」示例修改了代码,完整复现了这个问题,修改后的代码如下:
""" Embed VisPy into Qt =================== Display VisPy visualizations in a PyQt5 application. """ import numpy as np from PyQt5 import QtWidgets from vispy.scene import SceneCanvas, visuals, AxisWidget from vispy.app import use_app IMAGE_SHAPE = (600, 800) # (height, width) CANVAS_SIZE = (800, 600) # (width, height) NUM_LINE_POINTS = 200 class MyMainWindow(QtWidgets.QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) central_widget = QtWidgets.QWidget() main_layout = QtWidgets.QHBoxLayout() self._controls = Controls() main_layout.addWidget(self._controls) self._canvas_wrapper = CanvasWrapper() main_layout.addWidget(self._canvas_wrapper.canvas.native) central_widget.setLayout(main_layout) self.setCentralWidget(central_widget) class Controls(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent) layout = QtWidgets.QVBoxLayout() self.colormap_label = QtWidgets.QLabel("Image Colormap:") layout.addWidget(self.colormap_label) self.colormap_chooser = QtWidgets.QComboBox() self.colormap_chooser.addItems(["viridis", "reds", "blues"]) layout.addWidget(self.colormap_chooser) self.line_color_label = QtWidgets.QLabel("Line color:") layout.addWidget(self.line_color_label) self.line_color_chooser = QtWidgets.QComboBox() self.line_color_chooser.addItems(["black", "red", "blue"]) layout.addWidget(self.line_color_chooser) layout.addStretch(1) self.setLayout(layout) class CanvasWrapper: def __init__(self): self.canvas = SceneCanvas(size=CANVAS_SIZE) self.grid = self.canvas.central_widget.add_grid() self.view_top = self.grid.add_view(0, 1, bgcolor='cyan') image_data = _generate_random_image_data(IMAGE_SHAPE) self.image = visuals.Image( image_data, texture_format="auto", cmap="viridis", parent=self.view_top.scene, ) self.view_top.camera = "panzoom" self.view_top.camera.set_range( x=(0, IMAGE_SHAPE[1]), y=(0, IMAGE_SHAPE[0]), margin=0) self.x_axis = AxisWidget( axis_label="X Axis Label", orientation='bottom') self.x_axis.stretch = (1, 0.1) self.grid.add_widget(self.x_axis, row=1, col=1) self.grid.padding = 0 self.x_axis.link_view(self.view_top) self.y_axis = AxisWidget( axis_label="Y Axis Label", orientation='left') self.y_axis.stretch = (0.1, 1) self.grid.add_widget(self.y_axis, row=0, col=0) self.y_axis.link_view(self.view_top) def _generate_random_image_data(shape, dtype=np.float32): rng = np.random.default_rng() data = rng.random(shape, dtype=dtype) return data def _generate_random_line_positions(num_points, dtype=np.float32): rng = np.random.default_rng() pos = np.empty((num_points, 2), dtype=np.float32) pos[:, 0] = np.arange(num_points) pos[:, 1] = rng.random((num_points,), dtype=dtype) return pos if __name__ == "__main__": app = use_app("pyqt5") app.create() win = MyMainWindow() win.show() app.run()
初始生成的图像中坐标轴显示异常,而一旦对画布进行平移或缩放操作,坐标轴就会自动修正为正确状态。
有没有朋友知道该怎么调整,让坐标轴在初始加载时就正常显示呢?
备注:内容来源于stack exchange,提问作者ViNOJ
相关产品推荐
相关产品推荐

