PyQt5 – 多行标签

  • Post category:Python

下面是Python的PyQt5多行标签的使用攻略。

什么是PyQt5多行标签?

PyQt5是Python的一种GUI开发框架,可以帮助开发者轻松地创建基于桌面的应用程序。多行标签则是PyQt5中的一个控件,它允许开发者在窗口中添加多个标签页,并在标签页中放置控件和文本。每个标签页可以包含不同的控件和文本,从而可以在一个窗口中提供多个不同的功能。

多行标签的创建

要创建一个多行标签,首先需要导入PyQt5库,并实例化一个QTabWidget对象。例如:

import PyQt5.QtWidgets as QtWidgets
tab_widget = QtWidgets.QTabWidget()

这将创建一个名为tab_widget的多行标签对象,可以在其中添加标签页。

添加标签页

要向多行标签中添加标签页,请使用addTab方法。例如,以下代码将向tab_widget添加两个标签页:

import PyQt5.QtWidgets as QtWidgets
tab_widget = QtWidgets.QTabWidget()

# 添加两个标签页
tab_widget.addTab(QtWidgets.QWidget(), '标签页 1')
tab_widget.addTab(QtWidgets.QWidget(), '标签页 2')

每个标签页是一个单独的QWidget对象,可以在其中添加其他控件。标签页的名称是通过第二个参数传递给addTab方法的。

向标签页添加控件

要向标签页中添加控件,可以使用在常规QWidget对象上使用的所有方法和技术。例如,以下代码将在一个名为container的QWidget对象中添加一个标签和文本框,并将该QWidget添加为tab_widget的第一个标签页:

import PyQt5.QtWidgets as QtWidgets
tab_widget = QtWidgets.QTabWidget()

# 添加一个标签页,其中包含一个标签和文本框
container = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
label = QtWidgets.QLabel('标签')
layout.addWidget(label)
text_box = QtWidgets.QLineEdit()
layout.addWidget(text_box)
container.setLayout(layout)
tab_widget.addTab(container, 'Tab 1')

通过使用QWidget上的布局管理器,在一个QWidget对象中添加多个控件。

示例1

以下示例演示如何创建有多个标签和控件的tabs:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建多行标签
        self.tabs = QTabWidget()
        self.setCentralWidget(self.tabs)

        # 创建第一个标签页
        self.tab1 = QWidget()
        self.tab1.layout = QVBoxLayout(self.tab1)
        self.tab1.label = QLabel('这是第一个标签页的文本')
        self.tab1.layout.addWidget(self.tab1.label)
        self.tab1.button = QPushButton('按钮')
        self.tab1.layout.addWidget(self.tab1.button)
        self.tabs.addTab(self.tab1, '标签 1')

        # 创建第二个标签页
        self.tab2 = QWidget()
        self.tab2.layout = QVBoxLayout(self.tab2)
        self.tab2.label = QLabel('这是第二个标签页的文本')
        self.tab2.layout.addWidget(self.tab2.label)
        self.tab2.text_box = QLineEdit()
        self.tab2.layout.addWidget(self.tab2.text_box)
        self.tab2.button = QPushButton('按钮')
        self.tab2.layout.addWidget(self.tab2.button)
        self.tabs.addTab(self.tab2, '标签 2')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

此示例创建一个MainWindow窗口,并在其中包含两个标签页,每个标签页中有控件。

示例2

以下示例演示如何使用多行标签控制几个不同的部件:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QSlider, QLCDNumber

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建多行标签
        self.tabs = QTabWidget()
        self.setCentralWidget(self.tabs)

        # 创建第一个标签页
        self.tab1 = QWidget()
        self.tab1.layout = QVBoxLayout(self.tab1)
        self.tab1.label = QLabel('这是第一个标签页的文本')
        self.tab1.layout.addWidget(self.tab1.label)
        self.tab1.slider = QSlider()
        self.tab1.slider.setMinimum(0)
        self.tab1.slider.setMaximum(100)
        self.tab1.slider.setValue(50)
        self.tab1.slider.setOrientation(1)
        self.tab1.layout.addWidget(self.tab1.slider)
        self.tab1.lcd = QLCDNumber()
        self.tab1.lcd.display(50)
        self.tab1.layout.addWidget(self.tab1.lcd)
        self.tabs.addTab(self.tab1, '标签 1')

        # 创建第二个标签页
        self.tab2 = QWidget()
        self.tab2.layout = QVBoxLayout(self.tab2)
        self.tab2.label = QLabel('这是第二个标签页的文本')
        self.tab2.layout.addWidget(self.tab2.label)
        self.tab2.button = QPushButton('按钮')
        self.tab2.layout.addWidget(self.tab2.button)
        self.tabs.addTab(self.tab2, '标签 2')

        # 连接信号和槽
        self.tab1.slider.valueChanged.connect(self.tab1.lcd.display)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

此示例创建一个MainWindow窗口,并在其中包含两个标签页。第一个标签页包含一个滑块和一个LCD数字显示器,可以根据滑块的值来更新LCD数字显示器的值。第二个标签页只包含一个按钮。