반응형

QSlider를 움직여서 QProgressbar를 움직이는 예제를 해보았다.

사실 LineBar 형태의 툴이 있었으면 했는데, 그리기가 귀찮아서 QProgressbar로 대체했다.

슬라이더의 기본 분해능이 낮기 때문에 setRange를 통해서 이를 설정해주었다.

그리고 슬라이더의 valueChanged.connect를 통해서 Progressbar와 Label이 변경되도록 했다.

 

결과물

이런 느낌이다.


 

코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
## Ex 5-8. QSlider & QDial.
 
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QDial, QPushButton, QLabel, QProgressBar
from PyQt5.QtCore import Qt
 
 
class MyApp(QWidget):
 
    def __init__(self):
        super().__init__()
        self._init_UI()
        self._init_window()
 
    def _init_UI(self):
        self.pb = QProgressBar(self)
        self.pb.setGeometry(3015030050)
 
        self._slider = QSlider(Qt.Horizontal, self)
        self._slider.setGeometry(307030050)
        self._slider_scale = 100.0
        self._slider_min = 0
        self._slider_max = 50
        self._slider_tick_cnt = 5
        self._slider.setRange(int(self._slider_min*self._slider_scale), int(self._slider_max*self._slider_scale))
        self._slider.setTickInterval(int((self._slider_max-self._slider_min)*self._slider_scale/(self._slider_tick_cnt-1)))
        self._slider.setSingleStep(1# 칸 당 조절되는 값
        self._slider.setTickPosition(QSlider.TicksBelow)
        self._slider.valueChanged.connect(self._update_label)
 
        # Slider 값 표시
        self.label = QLabel("0.0"self)
        self.label.setGeometry(301030050)
 
        # 최대 최소값 표시
        label = QLabel("{:.2f}".format(self._slider_min), self)
        label.setAlignment(Qt.AlignLeft | Qt.AlignTop)
        label.setGeometry(30505020)
        label = QLabel("{:.2f}".format(self._slider_max), self)
        label.setGeometry(270505020)
        label.setAlignment(Qt.AlignRight | Qt.AlignTop)
 
 
    def _init_window(self):
        self.setWindowTitle('QSlider and QDial')
        self.setGeometry(300300400300)
        self.show()
 
    def _update_label(self):
        self.label.setText("{:.2f}".format(self._slider.value()/self._slider_scale))
        normalized_value = 100*(self._slider.value()/self._slider_scale - self._slider_min) / (self._slider_max - self._slider_min)
        self.pb.setValue(int(normalized_value))
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())
cs

 

EOF

728x90

+ Recent posts