PYQT5实现文本居中显示

文章介绍了在Pyqt5中使用Qtdesigner设计界面时遇到的文本居中显示问题。通过比较Label、LineEdit、TextEdit和PlaintextEdit等控件的特性,提出了利用QFrame和Label结合布局及Alignment设置来实现文字在水平和垂直方向的居中显示,同时讨论了如何调整布局比例以适应界面尺寸变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:最近在学习Pyqt5的使用,学习过程中发现虽然Qt designer的设计功能很方便,但要想达到自己心目中的界面效果需要不断地调试和完善,工程量很是巨大,因此这个专栏用于记录一些我在使用qt时遇见的问题以及解决的办法,以供自己记录和大家讨论。

文字居中显示问题

Pyqt5有很多用于显示文字的控件,一开始我一直是混用的,但是这些控件在文本格式上的差别给我带来了巨大的麻烦。如图,下方是我想达到的文字显示效果:

也就是居中、靠左(或者其他文本格式)的混用,最简单的实现方法是使用换行和空格,表现在代码中也就是”\n”和“\t”符号,但是这种方法有着重大缺陷,文本的格式会随着界面的放大缩小而乱套,如图所示:

要想正确解决这个问题,我们需要先稍微了解一下qt几种文本显示控件的一些区别:Label、LineEdit显示一行文字,TextEdit、PlaintextEdit显示多行文字,我们可以通过选择控件的Alignment来改变其中文本显示格式,但是要注意PlaintextEdit不具备这个功能。

通过TextEdit的文本格式设置我们可以解决文字的横向居中问题,但是它只能达到以下效果:

在垂直方向文字无法居中,又只能通过换行符解决问题,显而易见这会带来之前提到的问题。TextEdit、PlaintextEdit都不能解决问题,最终我通过Label的设置找到了一种解决的办法。

1.添加QFrame,并设置背景色为白色:

结果:

如果想要它更像文本框,可以通过将frameShadow改为Plain给Frame加上边框:

结果:

2.放入两个Label控件并给Frame布局为垂直布局:
 

结果:

3.设置好每个Label的内容后分别为两个Label设置格式,其中AlignVCenter代表垂直方向的居中,AlignHCenter代表水平方向的居中:

结果:

根据前面给出的要求,其实这个界面还有缺陷,第一行和第二行的距离太远,我们可以通过设置第二行垂直方向的AlignTop(靠上)解决这个问题:

或者第二行不变,第一行的垂直方向设置为AlignBottom(靠下)也可以解决问题:

甚至还可以在设置Alignment的同时调整布局中两个Label的比例(LayoutStretch)来达到自己想要的效果:

怎么调整全看自己的需求,无论使用哪种调整方法,最后都可以实现随着界面的伸缩文字格式依然居中的效果:

最后总结一下:

水平方向:AlignLeft、AlignRight、AlignHCenter

垂直方向:AlignTop、AlignBottom、AlignVCenter

居中:AlignCenter

大家可以灵活运用多个Label,设置不同的显示格式和比例来完成自己的需求,当然,这种方法对于大量文字来说还有缺陷,欢迎有更好办法的小伙伴分享自己的想法。

附python代码供参考:

self.frame_3 = QFrame(self.frame_2)

self.frame_3.setObjectName(u"frame_3")

self.frame_3.setStyleSheet(u"background-color: rgb(255, 255, 255);\n"

"")

self.frame_3.setFrameShape(QFrame.StyledPanel)

self.frame_3.setFrameShadow(QFrame.Plain)

self.verticalLayout_3 = QVBoxLayout(self.frame_3)

self.verticalLayout_3.setObjectName(u"verticalLayout_3")

self.label = QLabel(self.frame_3)

self.label.setObjectName(u"label")

self.label.setAlignment(Qt.AlignCenter)



self.verticalLayout_3.addWidget(self.label)



self.label_2 = QLabel(self.frame_3)

self.label_2.setObjectName(u"label_2")

self.label_2.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)



self.verticalLayout_3.addWidget(self.label_2)



self.verticalLayout_3.setStretch(0, 2)

self.verticalLayout_3.setStretch(1, 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值