1

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 に設定しようとしましたが、うまくいきませんでした。

ご協力ありがとうございました。

編集:

写真はおそらく役に立ちます:

バー全体の写真は次のとおりです。

バー全体。

左側に配置されていない画像を次に示します。

左揃えではありません。

これは、右側に配置されていない画像です。

正しく配置されていません。

最後に、これを中央に配置します。

中央揃え。

4

1 に答える 1