Python QSlider值更改后Pyqtgraph ImageView未更新
我正在开发PyQt5+pyqtgraph用户界面。其主要思想是拥有一个图像查看器,我可以使用主窗口中的小部件进行更新,如滑块、线条编辑、按钮。。。现在,当我移动切片器时,更新图像时遇到问题。它连接到预期的函数,但ImageViewer上的图像始终保持不变(第一个)。我怎样才能解决这个问题?我知道pyqtgraph ImageViewer可以处理3D阵列,但在将来,我必须添加多个查看器,这些查看器将由同一个滑块更新。这是我的代码: 我使用的这个HDF5文件是一个(2048204810)大小的数组(里面有10个uint16图像) 这是.ui文件。它只有一个滑块和一个QWidget小部件Python QSlider值更改后Pyqtgraph ImageView未更新,python,python-3.x,pyqt,pyqt5,pyqtgraph,Python,Python 3.x,Pyqt,Pyqt5,Pyqtgraph,我正在开发PyQt5+pyqtgraph用户界面。其主要思想是拥有一个图像查看器,我可以使用主窗口中的小部件进行更新,如滑块、线条编辑、按钮。。。现在,当我移动切片器时,更新图像时遇到问题。它连接到预期的函数,但ImageViewer上的图像始终保持不变(第一个)。我怎样才能解决这个问题?我知道pyqtgraph ImageViewer可以处理3D阵列,但在将来,我必须添加多个查看器,这些查看器将由同一个滑块更新。这是我的代码: 我使用的这个HDF5文件是一个(2048204810)大小的数组(
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1132</width>
<height>880</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QGridLayout" name="ImageWidgetLayout">
<item row="0" column="0">
<widget class="QWidget" name="ImageWidget" native="true"/>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSlider" name="slicesSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1132</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
主窗口
0
0
1132
880
主窗口
按钮
Qt::水平
0
0
1132
26
您正在创建一个尚未添加到窗口的新ImageView,因此看不到更改,解决方案是只创建一次ImageView,然后重新使用它
类缩放UI:
def uuu init uuu(self,parent=None):
self.ui=uic.loadUi(
os.path.dirname(os.path.realpath(_文件__))+“/GUI/ZoomGUI.ui”
)
self.file_path=“recon/tomo-2048x2048x10_16bit.h5”
#添加图像小部件
lay=QtGui.QVBoxLayout(self.ui.ImageWidget)
self.imv=pg.ImageView()
lay.addWidget(self.imv)
#配置切片器
self.number_of_slices=self.get_number_of_slices()
self.ui.slicessSlider.setMaximum(self.number\u of\u slices-1)
self.ui.slicessSlider.valueChanged.connect(self.imageView)
self.imageView(self.ui.slicessSlider.value())
def imageView(自身,切片编号):
imagedata=self.get\u图像(切片编号)
打印(图像数据)
self.imv.setImage(图像数据)
def get_图像(自身、切片编号):
h5=h5py.File(self.File_路径,“r”)
数据=h5[“切片”][切片编号]
h5.关闭()
返回数据
def get_片数(自):
h5=h5py.File(self.File_路径,“r”)
尺寸=长度(h5[“切片])
h5.关闭()
返回大小
您是否意识到,使用Python Qt创建Gui与使用设计器一样简单,并且设计器创建的代码旨在方便地移植到多种编码语言,我猜您不会这么做。因此,您正在使用黑盒不可接触代码来呈现UI,而不是编写友好的Python Qt来呈现该代码——另一个注意事项是,如果您继续使用设计器UI,您将遇到一个又一个令人头痛的问题,因为我教过的每个人都不使用我教过的UI,因为他们最终
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1132</width>
<height>880</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QGridLayout" name="ImageWidgetLayout">
<item row="0" column="0">
<widget class="QWidget" name="ImageWidget" native="true"/>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSlider" name="slicesSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1132</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>