前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5常见布局、控件用法有哪些?

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

作者头像
闻说社
发布2024-07-12 11:59:06
600
发布2024-07-12 11:59:06

布局

  • QHBoxLayout - 水平布局。
代码语言:javascript
复制
ini 代码解读复制代码tab1 = QtWidgets.QWidget()    # 新建页面
tab1_layout = QtWidgets.QHBoxLayout()    # 新建水平布局
tab1_layout.addWidget(button)    # 向布局中添加单个控件
tab1.setLayout(tab1_layout)    # 将水平布局添加到页面
  • QVBoxLayout - 垂直布局。
代码语言:javascript
复制
ini 代码解读复制代码tab1 = QtWidgets.QWidget()    # 新建页面
tab1_layout = QtWidgets.QVBoxLayout()    # 新建垂直布局
tab1.setLayout(tab1_layout)    # 将垂直布局添加到页面
  • QGridLayout - 在网格中组织小部件。
代码语言:javascript
复制
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 - 表单布局。
代码语言:javascript
复制
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 - 显示文本或图片。
代码语言:javascript
复制
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 - 命令按钮。
代码语言:javascript
复制
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 - 单选按钮。
代码语言:javascript
复制
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 - 多选框。
代码语言:javascript
复制
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 - 单行文本输入框。
代码语言:javascript
复制
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 - 多行文本编辑控件。
代码语言:javascript
复制
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 - 下拉选择框。
代码语言:javascript
复制
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 - 日期和时间输入控件。
代码语言:javascript
复制
scss 代码解读复制代码self.data_now = QDateEdit()
self.data_now.setDateTime(QtCore.QDateTime.currentDateTime())

高级控件

  • QTreeWidget - 显示树形结构数据。
代码语言:javascript
复制
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 - 显示表格数据。
代码语言:javascript
复制
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)    # 添加到布局

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 布局
  • 常用控件
  • 高级控件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档