PyQt5 QScrollBar – 价值改变的信号

  • Post category:Python

在PyQt5中,QScrollBar是一个值域控件,它可以用来控制文本框、列表等控件中的滑动滚动条。当QScrollBar控件的值发生改变时,我们可以通过信号槽机制来实现相应的操作。其中,valueChanged()信号会在滑动条的值发生变化时发射,我们可以通过连接该信号与槽函数来实现值修改后的操作。

以下是使用QScrollBar控制文本框中字体大小的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QScrollBar, QHBoxLayout

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)

        # 创建文本框和滑动条控件
        self.textedit = QTextEdit(self)
        self.scrollbar = QScrollBar(self)

        # 将滑动条的valueChanged()信号连接至槽函数
        self.scrollbar.valueChanged.connect(self.changeValue)

        # 将文本框和滑动条控件添加至水平布局中
        hbox.addWidget(self.textedit)
        hbox.addWidget(self.scrollbar)

        self.setLayout(hbox)

        self.setGeometry(300, 300, 250, 150)
        self.show()

    def changeValue(self, value):
        # 根据滑动条的值改变文本框中字体大小
        self.textedit.setFontPointSize(value)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在上述代码中,我们首先创建了一个QHBoxLayout布局,然后分别创建了QTextEdit和QScrollBar控件。接下来,我们将QScrollBar的valueChanged()信号连接至槽函数changeValue()。

在changeValue()函数中,我们需要获取滑动条的值,然后通过setFontPointSize()方法将文本框中的字体大小修改为滑动条的值。

另外一个示例是使用QScrollBar控制列表的滚动。代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QScrollBar, QVBoxLayout

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout(self)

        # 创建列表和滑动条控件
        self.listwidget = QListWidget(self)
        self.scrollbar = QScrollBar(self)

        # 将滑动条的valueChanged()信号连接至槽函数
        self.scrollbar.valueChanged.connect(self.scrollList)

        # 将1~100添加至列表中
        for i in range(1, 101):
            self.listwidget.addItem(str(i))

        # 将列表和滑动条控件添加至垂直布局中
        vbox.addWidget(self.listwidget)
        vbox.addWidget(self.scrollbar)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 250, 150)
        self.show()

    def scrollList(self, value):
        # 根据滑动条的值滚动列表
        self.listwidget.verticalScrollBar().setValue(value)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在以上代码中,我们首先创建了一个QVBoxLayout布局,然后创建了QListWidget和QScrollBar控件。接下来,我们将QScrollBar的valueChanged()信号连接至槽函数scrollList()。

在scrollList()函数中,我们需要获取滑动条的值,然后使用QListWidget控件的verticalScrollBar()方法获取垂直滚动条的控制权,最后通过setValue()方法将列表滚动至对应位置。