Qt Designer 设计PyQt5界面时自适应设置

Qt Designer设计PyQt5界面自适应设置

最近在学习PyQt5,学习推荐知乎专栏PyQt5图形界面编程 
主要是有Gif看他们是怎么用Qt Designer 设计的。

今天遇到了一个问题,就是在使用布局的时候,一直没有找到自适应选项。就是如果背景缩小时,前面的控件会被遮住,如下图右边: 

最终找到这篇文章,有了思路Qt Creator 窗体控件自适应窗口大小布局

1. 全局自适应
在空白的地方点击右键》布局》垂直布局, 
不过参考文档中说要选择》在窗体布局中布局,我这里不行,选择后会自动缩小到最小。

但是我选择 垂直、水平、网格布局,都可以布满整个页面 


2. 局部自适应
由于空间中还有几个布局控件嵌套,如果需要调整其中的小控件,如下图中日历吧另一个TextLabel挤到了一边,想调整到两边一样大,鼠标拖动边框已经不行了。 


如果想让两个都居中,只能在属性中设置了。将两个控件的sizePolicy属性Preferred改为Expanding。其实改右边TextLabel就好,不过为了保险起见,两边都修改把。

最终调整如下图所

PyQt5Qt Designer 中使用代码添加 widget 实现自适应,可通过以下几种常见方法: ### 使用布局管理器 布局管理器能够自动调整子控件的大小和位置,以适应父窗口的大小变化。常见的布局管理器有 `QVBoxLayout`(垂直布局)、`QHBoxLayout`(水平布局)、`QGridLayout`(网格布局)等。 以下是一个使用 `QVBoxLayout` 的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton app = QApplication(sys.argv) window = QWidget() # 创建布局管理器 layout = QVBoxLayout() # 创建按钮并添加到布局中 button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") layout.addWidget(button1) layout.addWidget(button2) # 将布局设置给窗口 window.setLayout(layout) window.show() sys.exit(app.exec_()) ``` 当窗口大小改变布局管理器会自动调整按钮的大小和位置,以填满整个窗口。 ### 重写 `resizeEvent` 方法 如果需要对控件自适应进行更精细的控制,可以重写 `resizeEvent` 方法。例如,为窗口添加自适应背景图片的功能: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPalette, QPixmap, QBrush class MyWindow(QWidget): def resizeEvent(self, event): palette = QPalette() pix = QPixmap('resources/background.jpg') pix = pix.scaled(self.width(), self.height()) palette.setBrush(QPalette.Background, QBrush(pix)) self.setPalette(palette) super().resizeEvent(event) app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` 上述代码中,当窗口大小改变,`resizeEvent` 方法会被调用,背景图片会自动调整大小以适应窗口大小[^1]。 ### StackedWidget 的自适应 对于 `StackedWidget`,需要先将每个页面进行布局,然后使用 `insertWidget` 或 `addWidget` 方法将页面插入到 `StackedWidget` 中。这样,`StackedWidget` 会充满每个页面的布局,并且会跟随伸缩[^4]。 示例代码如下: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QStackedWidget app = QApplication(sys.argv) window = QWidget() # 创建 StackedWidget stacked_widget = QStackedWidget() # 创建页面 1 page1 = QWidget() layout1 = QVBoxLayout() label1 = QLabel("Page 1") layout1.addWidget(label1) page1.setLayout(layout1) # 创建页面 2 page2 = QWidget() layout2 = QVBoxLayout() label2 = QLabel("Page 2") layout2.addWidget(label2) page2.setLayout(layout2) # 将页面添加到 StackedWidget 中 stacked_widget.addWidget(page1) stacked_widget.addWidget(page2) # 创建主布局并添加 StackedWidget main_layout = QVBoxLayout() main_layout.addWidget(stacked_widget) window.setLayout(main_layout) window.show() sys.exit(app.exec_()) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值