您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# PyQt5窗体居中和布局以及库QLabel的用法
## 一、窗体居中显示的方法
在PyQt5中实现窗体居中显示是GUI开发的基础需求,以下是三种常用方法:
### 1. 基于屏幕尺寸计算居中坐标
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class CenterWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('窗体居中')
self.resize(400, 300)
# 获取屏幕尺寸
screen = QApplication.primaryScreen().geometry()
# 计算窗体位置
x = (screen.width() - self.width()) // 2
y = (screen.height() - self.height()) // 2
self.move(x, y)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = CenterWindow()
window.show()
sys.exit(app.exec_())
from PyQt5.QtWidgets import QDesktopWidget
def center(self):
qr = self.frameGeometry() # 获取窗体矩形
cp = QDesktopWidget().availableGeometry().center() # 获取屏幕中心点
qr.moveCenter(cp) # 将矩形中心移动到屏幕中心
self.move(qr.topLeft()) # 移动窗体
def center(self):
screen = QApplication.primaryScreen().availableGeometry()
size = self.geometry()
self.move((screen.width()-size.width())/2,
(screen.height()-size.height())/2)
布局类 | 说明 |
---|---|
QHBoxLayout | 水平排列控件 |
QVBoxLayout | 垂直排列控件 |
QGridLayout | 网格布局(行列形式) |
QFormLayout | 表单布局(标签-字段对) |
from PyQt5.QtWidgets import (QPushButton, QVBoxLayout,
QHBoxLayout, QGroupBox)
class LayoutExample(QWidget):
def __init__(self):
super().__init__()
# 创建水平布局
hbox = QHBoxLayout()
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
hbox.addWidget(btn1)
hbox.addWidget(btn2)
# 创建垂直布局
vbox = QVBoxLayout()
btn3 = QPushButton("按钮3")
btn4 = QPushButton("按钮4")
vbox.addWidget(btn3)
vbox.addWidget(btn4)
# 组合布局
group = QGroupBox("布局示例")
layout = QVBoxLayout()
layout.addLayout(hbox)
layout.addLayout(vbox)
group.setLayout(layout)
# 主布局
main_layout = QVBoxLayout()
main_layout.addWidget(group)
self.setLayout(main_layout)
# 设置边距和间距
layout.setContentsMargins(10, 10, 10, 10) # 左,上,右,下
layout.setSpacing(5) # 控件间距
# 添加伸缩空间
layout.addStretch(1) # 添加可伸缩空间
from PyQt5.QtWidgets import QLabel
label = QLabel("普通文本")
label.setText("动态更新文本") # 修改文本内容
# HTML格式文本
label.setText("<h2>标题</h2><b>加粗</b> <i>斜体</i>")
# 超链接
label.setText('<a href="https://example.com">点击跳转</a>')
label.setOpenExternalLinks(True) # 允许打开外部链接
from PyQt5.QtGui import QPixmap
# 显示本地图片
pixmap = QPixmap("image.png")
label.setPixmap(pixmap)
label.setScaledContents(True) # 自适应大小
# 显示QPixmap对象
from PyQt5.QtGui import QImage
image = QImage(100, 100, QImage.Format_RGB32)
image.fill(Qt.white)
label.setPixmap(QPixmap.fromImage(image))
from PyQt5.QtCore import QPropertyAnimation, QRect
# 创建位移动画
anim = QPropertyAnimation(label, b"geometry")
anim.setDuration(1000) # 1秒动画
anim.setStartValue(QRect(0, 0, 100, 30))
anim.setEndValue(QRect(100, 100, 100, 30))
anim.start()
# 使用QSS样式表
label.setStyleSheet("""
QLabel {
color: red;
background-color: #f0f0f0;
border: 2px solid #333;
border-radius: 5px;
padding: 5px;
}
""")
class DemoWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("综合示例")
self.resize(600, 400)
self.center() # 调用居中方法
# 创建主布局
main_layout = QVBoxLayout()
# 图片标签
img_label = QLabel()
img_label.setPixmap(QPixmap("demo.png").scaled(400, 200))
img_label.setAlignment(Qt.AlignCenter)
# 文本标签
text_label = QLabel("""
<h1 style='color:blue'>PyQt5示例</h1>
<p>这是一个展示QLabel和布局的综合示例</p>
""")
text_label.setAlignment(Qt.AlignCenter)
# 添加到布局
main_layout.addWidget(img_label)
main_layout.addWidget(text_label)
self.setLayout(main_layout)
def center(self):
# 使用QDesktopWidget实现居中
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
通过合理使用窗体居中、布局管理和QLabel控件,可以构建出既美观又功能完善的PyQt5应用程序。建议开发者多实践不同布局组合,并善用QLabel的富文本和样式表功能来提升界面表现力。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。