【问题标题】:Slider in PyQt4PyQt4 中的滑块
【发布时间】:2017-09-29 08:30:19
【问题描述】:

我是 PyQt 的新手,我正在尝试在 PyQt4 中实现滑块,但我不知道为什么代码代码没有生成任何输出。

我想要的是,创建 3 个滑块来动态更改 3 个值。

我在这里调整文本“hue”、“sat”、“val”的字体大小。

PyQt 有什么好的学习资源吗?

这是我的代码

PyQt4Slider.py

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Window(QWidget):
def __init__(self):
    super(Window, self).__init__()
    self.setGeometry(50,50,500,300)
    self.setWindowTiltle("HSV")
    self.home()

def home(self):
    #hue = 100
    #sat = 100
    #val = 100
    layout = QVBoxLayout()
    self.l1 = QLabel("hue")
    self.l2 = QLabel("sat")
    self.l3 = QLabel("val")
    self.l1.setAlignment(Qt.AlignCenter)
    self.l2.setAlignment(Qt.AlignCenter)
    self.l3.setAlignment(Qt.AlignCenter)
    layout.addWidget(self.l1)
    layout.addWidget(self.l1)
    layout.addWidget(self.l1)

    self.sl = QSlider(Qt.Horizontal)
    self.s2 = QSlider(Qt.Horizontal)
    self.s3 = QSlider(Qt.Horizontal)

    self.sl.setMinimum(0)
    self.sl.setMaximum(179)
    self.sl.setValue(20)
    self.sl.setTickPosition(QSlider.TicksBelow)
    self.sl.setTickInterval(5)

    self.s2.setMinimum(0)
    self.s2.setMaximum(255)
    self.s2.setValue(100)
    self.s2.setTickPosition(QSlider.TicksBelow)
    self.s2.setTickInterval(5)

    self.s3.setMinimum(0)
    self.s3.setMaximum(255)
    self.s3.setValue(100)
    self.s3.setTickPosition(QSlider.TicksBelow)
    self.s3.setTickInterval(5)

    layout.addWidget(self.s1)
    self.sl.valueChanged.connect(self.valuechange)
    layout.addWidget(self.s2)
    self.s2.valueChanged.connect(self.valuechange)
    layout.addWidget(self.s3)
    self.s3.valueChanged.connect(self.valuechange)

    self.setLayout(layout)

    def valuechange(self):
        sizel1 = self.sl.value()
        self.l1.setFont("Arial",sizel1)
        sizel2 = self.sl.value()
        self.l2.setFont("Arial", sizel2)
        sizel2 = self.sl.value()
        self.l2.setFont("Arial", sizel2)




def main():
    app = QApplication(sys.argv)
    ex = Window()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

这是我运行代码后得到的结果

在 0.000 秒内运行 0 次测试

好的

进程以退出代码 0 结束 空测试套件。

【问题讨论】:

    标签: python-3.x pyqt pyqt4 pyqt5 qslider


    【解决方案1】:

    脚本中的大部分问题都是由拼写错误引起的。这是一个应该可以正常工作的固定版本:

    import sys
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setGeometry(50,50,500,300)
            self.setWindowTitle("HSV")
            self.home()
    
        def home(self):
            layout = QVBoxLayout()
            self.l1 = QLabel("hue")
            self.l2 = QLabel("sat")
            self.l3 = QLabel("val")
            self.l1.setAlignment(Qt.AlignCenter)
            self.l2.setAlignment(Qt.AlignCenter)
            self.l3.setAlignment(Qt.AlignCenter)
            layout.addWidget(self.l1)
            layout.addWidget(self.l2)
            layout.addWidget(self.l3)
    
            self.s1 = QSlider(Qt.Horizontal)
            self.s2 = QSlider(Qt.Horizontal)
            self.s3 = QSlider(Qt.Horizontal)
    
            self.s1.setMinimum(0)
            self.s1.setMaximum(179)
            self.s1.setValue(20)
            self.s1.setTickPosition(QSlider.TicksBelow)
            self.s1.setTickInterval(5)
    
            self.s2.setMinimum(0)
            self.s2.setMaximum(255)
            self.s2.setValue(100)
            self.s2.setTickPosition(QSlider.TicksBelow)
            self.s2.setTickInterval(5)
    
            self.s3.setMinimum(0)
            self.s3.setMaximum(255)
            self.s3.setValue(100)
            self.s3.setTickPosition(QSlider.TicksBelow)
            self.s3.setTickInterval(5)
    
            layout.addWidget(self.s1)
            self.s1.valueChanged.connect(self.valuechange)
            layout.addWidget(self.s2)
            self.s2.valueChanged.connect(self.valuechange)
            layout.addWidget(self.s3)
            self.s3.valueChanged.connect(self.valuechange)
    
            self.setLayout(layout)
    
            # set the initial fonts
            self.valuechange()
    
        def valuechange(self):
            sizel1 = self.s1.value()
            self.l1.setFont(QFont("Arial", sizel1))
            sizel2 = self.s2.value()
            self.l2.setFont(QFont("Arial", sizel2))
            sizel3 = self.s3.value()
            self.l3.setFont(QFont("Arial", sizel3))
    
    def main():
        app = QApplication(sys.argv)
        ex = Window()
        ex.show()
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

    • 我正在 PyCharm 中测试这段代码,代码没有生成任何输出。我更新了运行代码后得到的内容。
    • @VikasGautam。看起来您正在尝试将其作为测试套件运行,这显然行不通。您只需将其作为普通脚本运行即可。
    • 我正在使用 virtualenv,你能告诉我我应该如何作为普通脚本执行
    • @VikasGautam。你在哪个平台上?
    • @VikasGautam。所以你应该能够做类似python.exe PyQt4Slider.py 的事情。显然你需要正确的脚本路径。
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多