LoginSignup
0
0

More than 1 year has passed since last update.

python GUI入門  QtDesigner + pySide スライダーテキストボックス動作連携(小数点表示)

Last updated at Posted at 2022-09-19

実行サンプル

小数以下でのスライダー動作。(Qsliderそのものは、0以上しか対応していないので換算あり。)
スライダーを動かすと、テキストボックスに値が入る
テキストボックス入力すると、スライダーが連携して動く。
image.png

実行環境

windows10
python3.9.5
Qt5.1.5 (QtDesigner6.0.2コミュニティ)

pythonモジュール:pySide6(pipでインストールしておく)

実行手順

ソースコードを作成する
windowsコマンドプロンプトでプログラム作成したフォルダに移動し、下記実行する

python mainwindow.py 

ソースコード作成手順

参考
https://qiita.com/taiko1/items/c19d75ba09d60ae5f5a6#4%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E6%89%8B%E9%A0%86

ソースコード

下記で構成される。
form.ui
mainwindow.py
pySide6_slider_decimal.pyproject
pySide6_slider_decimal.pyproject.user
Ui_MainWindow.py

mainwindow.py

# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys

from PySide6 import *
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *

from Ui_MainWindow import Ui_MainWindow


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # スライダー 小数点対応(QSliderは整数しか対応していない。小数にも対応できるようにする)
        self.ui.lineEdit1.editingFinished.connect(self.func_on_lineEdit1_editingFinished)
        self.ui.slider1.valueChanged.connect(self.func_on_slider1_valueChanged)

        # GUIフォーム初期値
        self.ui.slider1.setMinimum(1)
        self.ui.slider1.setMaximum(1000)

    def func_on_slider1_valueChanged(self):
        # スライダーは0以下数値を扱えないので、小数点以下にも対応できるように換算
        keta = -1 * 3
        value = self.ui.slider1.value()
        real_value = value * (pow(10, keta)) #round(value * (pow(10, -3)), 3)
        str_value = "%0.*f" % (abs(keta), real_value)
        # テキストボックスに値を入れる (lineEdit にしているので valueChangedにループはしない)
        self.ui.lineEdit1.setText(str_value)
        # print("[DEBUG]01 MainWindow.py-func_on_slider1_valueChanged value=", value, " real_value=", real_value, " textBox=" , self.ui.lineEdit1.text())

    def func_on_lineEdit1_editingFinished(self):
        #print("[DEBUG]01 MainWindow.py-func_on_model1_editingFinished\n")
        keta = 3
        value = float(self.ui.lineEdit1.text())
        self.ui.slider1.setValue(int(value * 10 ** keta)) # スライダーは0以下数値を扱えないので、小数点以下にも対応できるように換算

if __name__ == "__main__":
    app = QApplication([])
    widget = MainWindow()
    widget.show()
    sys.exit(app.exec_())

スライダー と スピンボックスの連携をしたいが
シグナルスロットでループしてうまくいかなかったので
EditingFinished が使えるテキストボックスで作成した。

関連資料

参考:
https://stackoverflow.com/questions/29543012/variable-number-of-decimal-digits-in-string-format

今後はクラス化も検討したい。
https://ymt-lab.com/post/2020/pyqt5-qdoublespinbox-and-qslider/
https://stackoverflow.com/questions/42820380/use-float-for-qslider

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0