QGridBoxLayout にある QSlider と QLabel を揃えようとしています
参考までに、これはビデオのフレームを表示するためのもので、他の場所で表示されます。ここの QLabel は、ビデオのラベル付きセクションを表示するためのもので、緑色のセクションは「ラベル付き」、黒色のセクションは「ラベルなし」です。
QSLider は次のように初期化されます。
self.slider = QSlider(Qt.Horizontal, self)
self.slider.setSingleStep(1)
self.slider.setFocusPolicy(Qt.NoFocus)
self.slider.valueChanged.connect(self.sliderChanged)
self.layout.addWidget(self.slider)
QLabel には QPixmap が含まれており、これには numpy 配列の形状 (100,1000,3) から作成された QImage があります。初期化する方法は次のとおりです。
image = np.zeros((100,1000,3), dtype=np.uint8) #Initialize a black picture
for combo in indices_list:
start, end = combo
start = int(start / self.length * 1000)
end = int(end / self.length * 1000)
image[:,start:end] = [0,255,0] #Label the columns as green
height, width, bytevalue = image.shape
qimage = QImage(image, width, height, bytevalue * width, QImage.Format_RGB888)
pixmap = QPixmap(qimage)
self.label.setPixmap(pixmap)
上記のコードが行うことは、開始インデックスと終了インデックスのリストを取得し、その範囲の列を緑に変更することです。
私が抱えている問題は、QSlider と QLabel が QVBoxLayout に一緒にスタックされていても、スライダーの位置が対応するピクセルと常に一致するとは限らないことです。これは、スライダーの「ハンドル」(正しい名前はわかりません) の左端がスライダーの左端で止まるからだと思います。それらは中心で直接一致し、中心から離れるにつれて一致しなくなります。
現在のスライダー値の QLabel の対応する列の真下にハンドルの中心を配置したいと思います。
スライダーの余白を 0 に設定しようとしましたが、うまくいきませんでした。
ご協力ありがとうございました。
編集:
写真はおそらく役に立ちます:
バー全体の写真は次のとおりです。
左側に配置されていない画像を次に示します。
これは、右側に配置されていない画像です。
最後に、これを中央に配置します。