Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QSlider值更改后Pyqtgraph ImageView未更新_Python_Python 3.x_Pyqt_Pyqt5_Pyqtgraph - Fatal编程技术网

Python QSlider值更改后Pyqtgraph ImageView未更新

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)大小的数组(

我正在开发PyQt5+pyqtgraph用户界面。其主要思想是拥有一个图像查看器,我可以使用主窗口中的小部件进行更新,如滑块、线条编辑、按钮。。。现在,当我移动切片器时,更新图像时遇到问题。它连接到预期的函数,但ImageViewer上的图像始终保持不变(第一个)。我怎样才能解决这个问题?我知道pyqtgraph ImageViewer可以处理3D阵列,但在将来,我必须添加多个查看器,这些查看器将由同一个滑块更新。这是我的代码:

我使用的这个HDF5文件是一个(2048204810)大小的数组(里面有10个uint16图像)

这是.ui文件。它只有一个滑块和一个QWidget小部件

<?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>