PyQt5常见布局、控件用法有哪些?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 这是关于Python GUI编程中使用的布局和控件的简要介绍:- **布局**: - `QHBoxLayout`:用于水平排列控件。 - `QVBoxLayout`:用于垂直排列控件。 - `QGridLayout`:在网格中排列控件,支持多行多列。 - `QFormLayout`:创建表单样式的布局,方便组织输入字段。

布局

  • QHBoxLayout - 水平布局。

ini

代码解读

复制代码

tab1 = QtWidgets.QWidget()    # 新建页面
tab1_layout = QtWidgets.QHBoxLayout()    # 新建水平布局
tab1_layout.addWidget(button)    # 向布局中添加单个控件
tab1.setLayout(tab1_layout)    # 将水平布局添加到页面

  • QVBoxLayout - 垂直布局。

ini

代码解读

复制代码

tab1 = QtWidgets.QWidget()    # 新建页面
tab1_layout = QtWidgets.QVBoxLayout()    # 新建垂直布局
tab1.setLayout(tab1_layout)    # 将垂直布局添加到页面

  • QGridLayout - 在网格中组织小部件。

python

代码解读

复制代码

self.tab1_gridLayout = QtWidgets.QGridLayout()    # 新建网格布局
self.tab1_gridLayout.setHorizontalSpacing(30)    # 设置水平间距
self.tab1_gridLayout.setVerticalSpacing(30)    # 设置垂直间距
self.tab1_gridLayout.setContentsMargins(30, 30, 30, 30)    # 设置内容边距(左,上,右,下)

self.tab1_lable_pc_ip = QtWidgets.QLabel()
self.tab1_gridLayout.addWidget(self.tab1_lable_pc_ip, 0, 0)    # 将控件添加至布局

self.tab1_lineEdit_pc_ip = QtWidgets.QLineEdit()
self.tab1_gridLayout.addWidget(self.tab1_lineEdit_pc_ip, 1, 0)

tab1_layout.addLayout(self.tab1_gridLayout)    # 将网格布局添加至水平/垂直布局

  • QFormLayout - 表单布局。

ini

代码解读

复制代码

# 创建一个 QFormLayout 实例
layout = QFormLayout()

# 添加一些字段到布局中
layout.addRow("姓名:", QLineEdit()) # 直接在 addRow 中创建 QLineEdit
layout.addRow("年龄:", QLineEdit())

# 可以先创建控件,然后把它们作为参数传递给 addRow
emailLabel = QLabel("邮箱:")
emailField = QLineEdit()
layout.addRow(emailLabel, emailField)

acceptTermsCheckBox = QCheckBox("我接受条款和条件")
layout.addRow("", acceptTermsCheckBox) # 对于复选框,左侧标签留空

submitButton = QPushButton("提交")
layout.addRow("", submitButton) # 提交按钮,左侧标签留空

# 设置窗口的布局
self.setLayout(layout)

常用控件

  • QLabel - 显示文本或图片。

scss

代码解读

复制代码

font = QFont()
font.setPointSize(12)

self.tab1_lable_name = QtWidgets.QLabel()
self.tab1_lable_name.setText("name")    # 设置lable名
self.tab1_lable_name.setFont(font)    # 设置字体大小
layout.addWidget(self.tab1_lable_name)    # 添加到布局
  • QPushButton - 命令按钮。

python

代码解读

复制代码

self.PushButton_run = QPushButton("执行")
self.PushButton_run.setFont(font)
self.PushButton_run.setEnabled(False)
self.PushButton_run.clicked.connect(self.run)
layout.addWidget(self.PushButton_run)    # 添加到布局

# 修改样式
self.button.setStyleSheet("""
            QPushButton {
                border-radius: 20px;    # 设置圆角的大小
                background-color: lightblue; # 设置背景色
                padding: 6px;           # 设置内边距
            }
            QPushButton:pressed {     # 设置按钮被按下时的样式
                background-color: darkblue;
            }
        """)
  • QRadioButton - 单选按钮。

python

代码解读

复制代码

self.RadioButton_1 = QRadioButton('RadioButton_1')
self.RadioButton_1.setChecked(True)    # 默认选中
self.RadioButton_1.clicked.connect(self.onRadioButtonClicked)
self.RadioButton_2 = QRadioButton('RadioButton_2')
self.RadioButton_2.clicked.connect(self.onRadioButtonClicked)
layout.addWidget(self.RadioButton_1)    # 添加到布局
layout.addWidget(self.RadioButton_2)    # 添加到布局

def onRadioButtonClicked(self):
       # 判断是哪个按钮被选中,并更新标签文本
       radioButton = self.sender()
       if radioButton.isChecked():
           self.label.setText(f"{radioButton.text()} 被选中")
  • QCheckBox - 多选框。

python

代码解读

复制代码

self.cb1 = QCheckBox("选项 1")
self.cb2 = QCheckBox("选项 2")
self.cb1.stateChanged.connect(self.onCheckBoxClicked)
self.cb2.stateChanged.connect(self.onCheckBoxClicked)
layout.addWidget(self.cb1)
layout.addWidget(self.cb2)

def onCheckBoxClicked(self):
       # 初始化一个空字符串用以存放结果
       result = "已选中:"

       # 检查复选框的状态并更新字符串
       if self.cb1.isChecked():
           result += "选项 1 "
       if self.cb2.isChecked():
           result += "选项 2 "

  • QSlider - 滑块控件。
  • QProgressBar - 进度条。
  • QLineEdit - 单行文本输入框。

python

代码解读

复制代码

self.lineEdit = QtWidgets.QLineEdit()
self.lineEdit.setText("host_ip:")
self.lineEdit.setFont(font)
self.lineEdit.setPlaceholderText("输入IP,回车结束")  # 设置提示文


self.lineEdit.textChanged.connect(self.onTextChanged)    # 每当文本改变时,都会发出此信号
self.lineEdit.textEdited.connect(self.onTextChanged)    #用户通过键入改变文本时,发出此信号(不包括通过编程方式更改文本)
self.lineEdit.returnPressed.connect(self.onReturnPressed)    # 当用户在该控件中按下回车(或确定)键时,发出此信号

layout.addWidget(self.lineEdit)    # 添加控件到布局中

def onTextChanged(self, text):
    print(text)

def onReturnPressed(self):
    print(self.lineEdit.text())

  • QTextEdit - 多行文本编辑控件。

python

代码解读

复制代码

self.tab1_TextEdit_reply = QtWidgets.QTextEdit()
self.tab1_TextEdit_reply.setText("reply:")
self.tab1_TextEdit_reply.setFixedHeight(100)  # 将高度设置为100像素
self.tab1_TextEdit_reply.textChanged.connect(self.onTextChanged)    # 每当文本改变时,都会发出此信号
self.tab1_TextEdit_reply.cursorPositionChanged.connect(self.onTextChanged)    #当光标位置改变时发出此信号
self.tab1_TextEdit_reply.selectionChanged.connect(self.onReturnPressed)    # 当文本的选择区域变化时发出此信号
  • QComboBox - 下拉选择框。

python

代码解读

复制代码

self.combo = QComboBox()

# 向下拉列表中添加条目

self.combo.addItem('选项 1')
self.combo.addItem('选项 2')
self.combo.addItem('选项 3')

self.combo.currentIndexChanged.connect(self.selectionChanged)    # 当选项改变时触发的信号

def selectionChanged(self, i):
    text = self.combo.currentText()    # 获取当前选中的文本并通过弹窗显示
    print(f'选中的是: {text}')
  • QSpinBox - 数字输入框。
  • QDateEdit, QTimeEdit, QDateTimeEdit - 日期和时间输入控件。

scss

代码解读

复制代码

self.data_now = QDateEdit()
self.data_now.setDateTime(QtCore.QDateTime.currentDateTime())

高级控件

  • QTreeWidget - 显示树形结构数据。

python

代码解读

复制代码

self.tree_widget = QtWidgets.QTreeWidget()
# 设置列数和列标题
self.tree_widget.setColumnCount(1)
self.tree_widget.setHeaderLabels(['Name'])


self.root_item = QtWidgets.QTreeWidgetItem(self.tree_widget, "root_item_name")
self.child_item = QtWidgets.QTreeWidgetItem(self.root_item, "child_item_name")
self.root_item.addChild(self.child_item)  # 可选的,因为子项已经通过构造函数添加
# 展开所有节点
self.tree_widget.expandAll()
self.tree_widget.clicked.connect(self.tab2_tree_onClicked)
splitter.addWidget(self.tree_widget)    # 将树的布局 添加至QSplitter

  • QListWidget - 显示列表数据。
  • QTableWidget - 显示表格数据。

python

代码解读

复制代码

self.table = QtWidgets.QTableWidget()
# 设置行数和列数
self.table.setRowCount(4)  # 4 行
self.table.setColumnCount(3)  # 3 列
self.table.setColumnWidth(0, 100)  # 为第一列设置宽度 100
self.table.setRowHeight(0, 50)     # 为第一行设置高度 50

# 设置列标题
self.table.setHorizontalHeaderLabels(["列 1", "列 2", "列 3"])
self.table.setItem(0, 0, QtWidgets.QTableWidgetItem(str(device_ip)).setFont(font))  # 显示ip
tab1_content_layout.addWidget(self.table)    # 添加到布局



相关文章
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
|
3月前
【qt】 QGridLayout布局管理器怎么用?
【qt】 QGridLayout布局管理器怎么用?
146 0
|
6月前
|
XML 缓存 C++
【Qt 控件】Qt 控件提升指南:从基础到高级应用
【Qt 控件】Qt 控件提升指南:从基础到高级应用
831 0
|
6月前
|
数据安全/隐私保护 容器
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
91 0
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
|
Python
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
10106 2
|
编解码 Python
Python高级进阶#008 pyqt5窗体居中和布局
Python高级进阶#008 pyqt5窗体居中和布局
298 0
Qt-QML-全新导航布局
哈哈,写了一个全新的导航布局,具体内容还没有完成,现在先把整个布局的屏幕划分分享出来
294 0
Qt-QML-全新导航布局
|
开发工具 C语言
Qt编写自定义控件33-图片切换动画
一、前言 在很多看图软件中,切换图片的时候可以带上动画过渡或者切换效果,显得更人性化,其实主要还是炫一些,比如百叶窗、透明度变化、左下角飞入等,无论多少种效果,核心都是围绕QPainter来进行,将各种动画效果对应的图片的区域动态计算并绘制出来,配合以QPropertyAnimation动画属性产生线性插值,比如渐入飞入时候,可以中间快速两端慢速。
1029 1
|
程序员 开发工具 C语言
Qt编写自定义控件64-垂直时间轴
一、前言 垂直时间轴控件,主要用来描述企业发展历程大事件,或者软件版本迭代历史等,通过时间节点和事件描述来直观的展示发展的过程,一般在web网页或者app中经常看到此类控件,尤其是公司的官网关于公司部分,着重在一些独角兽公司或者正处于蓬勃发展的公司,用来展示自己多牛逼,发展多么迅猛等。
1155 0
下一篇
无影云桌面