当前位置: 首页 > news >正文

PyQt 界面布局与交互组件使用指南

PyQt 界面布局与交互组件使用指南

在 PyQt 开发中,界面布局和交互组件是构建友好应用程序的关键。下面将详细介绍常用的布局方式与交互组件的使用方法。

1.1 代码布局

1.1.1 水平布局 QHBoxLayout

QHBoxLayout 用于将控件在水平方向上排列。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout# 创建应用程序实例
app = QApplication(sys.argv)
# 创建窗口实例
window = QWidget()
window.setWindowTitle('水平布局示例')# 创建水平布局对象
layout = QHBoxLayout()# 创建三个按钮
btn1 = QPushButton('按钮 1')
btn2 = QPushButton('按钮 2')
btn3 = QPushButton('按钮 3')# 将按钮添加到水平布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)# 将布局设置到窗口上
window.setLayout(layout)# 显示窗口
window.show()
# 进入应用程序的主循环
sys.exit(app.exec_())

代码中,先导入必要的模块。然后创建应用和窗口,接着实例化 QHBoxLayout 布局,创建三个按钮并添加到该布局,最后将布局设置到窗口并显示。运行后,三个按钮会在窗口中水平排列。

1.1.2 竖直布局 QVBoxLayout

QVBoxLayout 用于将控件在竖直方向上排列。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayoutapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('竖直布局示例')# 创建竖直布局对象
layout = QVBoxLayout()btn1 = QPushButton('按钮 1')
btn2 = QPushButton('按钮 2')
btn3 = QPushButton('按钮 3')# 将按钮添加到竖直布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)window.setLayout(layout)window.show()
sys.exit(app.exec_())

这里和水平布局类似,只是将布局换成了 QVBoxLayout。运行后,三个按钮会在窗口中竖直排列。

1.1.3 嵌套布局

嵌套布局就是将不同的布局组合在一起,实现更复杂的界面布局。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayoutapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('嵌套布局示例')# 外层竖直布局
main_layout = QVBoxLayout()# 内层水平布局 1
h_layout1 = QHBoxLayout()
btn1 = QPushButton('按钮 1')
btn2 = QPushButton('按钮 2')
h_layout1.addWidget(btn1)
h_layout1.addWidget(btn2)# 内层水平布局 2
h_layout2 = QHBoxLayout()
btn3 = QPushButton('按钮 3')
btn4 = QPushButton('按钮 4')
h_layout2.addWidget(btn3)
h_layout2.addWidget(btn4)# 将内层水平布局添加到外层竖直布局
main_layout.addLayout(h_layout1)
main_layout.addLayout(h_layout2)window.setLayout(main_layout)window.show()
sys.exit(app.exec_())

此代码先创建外层的竖直布局,然后创建两个内层的水平布局,每个水平布局里放两个按钮,再将内层水平布局添加到外层竖直布局。运行后,界面上会有两行按钮,每行两个,呈水平排列。

1.2 消息对话框 QMessageBox

QMessageBox 用于弹出各种消息对话框,向用户提示信息或获取简单的用户反馈。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QVBoxLayoutclass MyWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle('消息对话框示例')self.init_ui()def init_ui(self):layout = QVBoxLayout()btn = QPushButton('显示消息对话框')# 绑定按钮点击事件到 show_message 方法btn.clicked.connect(self.show_message)layout.addWidget(btn)self.setLayout(layout)def show_message(self):# 弹出信息对话框QMessageBox.information(self, '信息', '这是一条信息提示')# 弹出警告对话框QMessageBox.warning(self, '警告', '这是一条警告提示')# 弹出问题对话框,获取用户选择reply = QMessageBox.question(self, '问题', '你确定要执行此操作吗?', QMessageBox.Yes | QMessageBox.No)if reply == QMessageBox.Yes:print('用户选择了是')else:print('用户选择了否')app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())

代码定义了一个继承自 QWidget 的窗口类 MyWindow,在其中创建一个按钮,点击按钮会依次弹出信息、警告、问题对话框,对于问题对话框,还会根据用户选择输出相应内容。

1.3 单、复选框

1.3.1 单选框 QRadioButton

单选框同一组内的选项,用户只能选择其中一个。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout, QLabelclass MyWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle('单选框示例')self.init_ui()def init_ui(self):layout = QVBoxLayout()self.label = QLabel('还未选择')# 创建单选框组self.radio1 = QRadioButton('选项 1')self.radio2 = QRadioButton('选项 2')self.radio3 = QRadioButton('选项 3')# 绑定单选框状态改变事件self.radio1.toggled.connect(self.on_radio_toggled)self.radio2.toggled.connect(self.on_radio_toggled)self.radio3.toggled.connect(self.on_radio_toggled)layout.addWidget(self.radio1)layout.addWidget(self.radio2)layout.addWidget(self.radio3)layout.addWidget(self.label)self.setLayout(layout)def on_radio_toggled(self):# 获取被选中的单选框radio = self.sender()if radio.isChecked():self.label.setText(f'你选择了:{radio.text()}')app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())

这里创建了三个单选框和一个标签,当单选框状态改变时,会触发 on_radio_toggled 方法,在标签上显示选中的单选框内容。

1.3.2 复选框 QCheckBox

复选框同一组内的选项,用户可以选择多个。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout, QLabelclass MyWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle('复选框示例')self.init_ui()def init_ui(self):layout = QVBoxLayout()self.label = QLabel('已选择:')self.check1 = QCheckBox('选项 1')self.check2 = QCheckBox('选项 2')self.check3 = QCheckBox('选项 3')# 绑定复选框状态改变事件self.check1.stateChanged.connect(self.on_check_state_changed)self.check2.stateChanged.connect(self.on_check_state_changed)self.check3.stateChanged.connect(self.on_check_state_changed)layout.addWidget(self.check1)layout.addWidget(self.check2)layout.addWidget(self.check3)layout.addWidget(self.label)self.setLayout(layout)def on_check_state_changed(self):selected = []# 检查每个复选框的状态if self.check1.isChecked():selected.append(self.check1.text())if self.check2.isChecked():selected.append(self.check2.text())if self.check3.isChecked():selected.append(self.check3.text())self.label.setText(f'已选择:{", ".join(selected)}')app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())

代码创建了三个复选框和一个标签,当复选框状态改变时,on_check_state_changed 方法会收集被选中的复选框内容,在标签上显示。

1.4 PyQt 面向对象开发

面向对象开发能让 PyQt 代码结构更清晰,便于维护和扩展。下面以一个简单的窗口为例,展示面向对象的开发方式。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabelclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle('面向对象开发示例')# 设置中央部件self.central_widget = QWidget()self.setCentralWidget(self.central_widget)self.init_ui()def init_ui(self):layout = QVBoxLayout()self.label = QLabel('欢迎使用 PyQt 面向对象开发')btn = QPushButton('点击我')btn.clicked.connect(self.on_btn_clicked)layout.addWidget(self.label)layout.addWidget(btn)self.central_widget.setLayout(layout)def on_btn_clicked(self):self.label.setText('按钮被点击了!')app = QApplication(sys.argv)
window = MyMainWindow()
window.show()
sys.exit(app.exec_())

这里定义了继承自 QMainWindowMyMainWindow 类,在其中设置中央部件,进行界面初始化,按钮点击时会改变标签的文本,充分体现了面向对象封装、易扩展的特点。


文章转载自:

http://UimTiwJ4.qtxwb.cn
http://gBLtX2yn.qtxwb.cn
http://rOYtB6IY.qtxwb.cn
http://xpTdwMVc.qtxwb.cn
http://r0eB6HHj.qtxwb.cn
http://qQSgowmf.qtxwb.cn
http://dwfV4Awq.qtxwb.cn
http://gfKhuLC5.qtxwb.cn
http://LKrnFGQq.qtxwb.cn
http://31gtIEBS.qtxwb.cn
http://ZBzFbZDZ.qtxwb.cn
http://uYGQilbH.qtxwb.cn
http://DffKwJRe.qtxwb.cn
http://1eLcqS5y.qtxwb.cn
http://pVEsmjzk.qtxwb.cn
http://VQnfKVBu.qtxwb.cn
http://rk8qyWAR.qtxwb.cn
http://lqqP44tT.qtxwb.cn
http://nMufyZb8.qtxwb.cn
http://9ydhitVw.qtxwb.cn
http://OeantL7L.qtxwb.cn
http://ZD5KRzR4.qtxwb.cn
http://C6VfgQVy.qtxwb.cn
http://V9FKKImY.qtxwb.cn
http://7xgHyy0I.qtxwb.cn
http://P6yD1kA3.qtxwb.cn
http://JB36Qk3g.qtxwb.cn
http://Wqhl9EZX.qtxwb.cn
http://zQ1fiNzo.qtxwb.cn
http://FgnyBpDE.qtxwb.cn
http://www.dtcms.com/a/374463.html

相关文章:

  • 资产 OCR 识别:批量导入效率提升指南
  • 萝卜切丁机 机构笔记
  • Java学习笔记三(封装)
  • 使用云手机能否给企业降本增效
  • Linux笔记---进程间关系与守护进程
  • 详细:虚拟机 + Linux 环境搭建 + Oracle 11.2.0 EE 安装全流程
  • 思利普科技:用BCG心冲击技术重新定义睡眠监测,掀起床垫行业智能化革命
  • 2025世界智博会,揭幕AI触手可及的科幻生活
  • 探索 CSS 3D 属性:从基础到炫酷动画案例
  • “从零到一:使用GitLab和Jenkins实现自动化CI/CD流水线”
  • 考研408《计算机组成原理》复习笔记,第六章(1)——总线概念
  • adb的常用命令
  • 设计模式:策略模式
  • 【华为OD】数字游戏
  • 分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
  • 【设计模式】 外观模式
  • 在 JavaScript中使用msgpack-lite 和zlib实现大数据文件的压缩和读取
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(中)
  • 【数据库】Redis详解:内存数据库与缓存之王
  • OpenCV 图像处理实战:从图像金字塔到直方图分析
  • MongoDB 安全加固:构建企业级纵深防御体系——用户权限管理与 TLS 加密配置详解
  • 为什么苹果签名经常会掉签?
  • http basic认证流程
  • Docker 存储卷(Volume)核心概念、类型与操作指南
  • 【iOS】 单例模式
  • Matlab机器人工具箱使用4 蒙特卡洛法绘制工作区间
  • 【华为OD】环中最长子串2
  • 08 docker搭建大数据集群
  • 【华为OD】微服务的集成测试
  • Tool | UI/BI类网址收录