学习记录Day6-PyQt5设置窗口样式

文章介绍了如何使用PyQt5的setWindowFlags函数来设置不同类型的窗口样式,包括基本窗口类型如Qt.Widget和Qt.Dialog,以及自定义窗口外观如Qt.FramelessWindowHint。通过示例代码展示了如何实现特定窗口功能,如仅显示关闭按钮或设置为对话框窗口。强调了设置窗口样式的代码需在setupUi()后执行。

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

学习资源:《Python GUI设计PyQt5从入门到实践》

(16条消息) 学习记录Day4-Python GUI设计PyQt5从入门到实践_li_s_t的博客-优快云博客

接上回成功运行第一个PyQt5窗口程序,其中添加的主程序如下:

import sys
#程序入口,程序从此处启动PyQt设计的窗口
from PyQt5.QtWidgets import QApplication, QMainWindow
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()      #创建窗口对象
    ui = Ui_MainWindow()            #创建PyQt设计的窗口对象
    ui.setupUi(MainWindow)          #调用PyQt窗体的方法对窗体对象进行初始化设置
    MainWindow.show()               #显示窗体
sys.exit(app.exec_())               #程序关闭时退出进程

一、使用setWindowsFlags()函数设置窗口样式

Qt.WindowsFlags参数表示要设置的窗口样式,其取值分为两种类型。

下面两个表格是自己手打的,如有误欢迎评论区留言,非常感谢!!


二、表1-PyQt5的基本窗口类型及说明

参数值

说明

Qt.Widget

默认窗口,有最大化、最小化和关闭按钮

Qt.Window

普通窗口,有最大化、最小化和关闭按钮

Qt.Dialog

对话框窗口,有问号(?)和关闭按钮

Qt.Popup

无边框的弹出窗口

Qt.ToolTip

无边框的弹出窗口,没有任务栏

Qt.SplashScreen

无边框的闪屏窗口,没有任务栏

Qt.SubWindow

子窗口,窗口没有按钮,但有标题

例如,下面代码用来将名称为MainWindow的窗口设置为一个对话框窗口

MainWindow.setWindowFlags(QtCore.Qt.Dialog)    #显示一个有问号(?)和关闭按钮的对话框

三、表2-自定义顶层窗口外观及说明

参数值

说明

Qt.MSWindowsFixedSizeDialogHint

无法调整大小的窗口

Qt.FramelessWindowHint

无边框窗口

Qt.CustomizeWindowHint

有边框但无标题和按钮,不能移动和拖动的窗口

Qt.WindowTitleHint

添加标题栏和一个关闭按钮的窗口

Qt.WindowSystemMenuHint

添加系统目录和一个关闭按钮的窗口

Qt.WindowMaximizeButtonHint

激活最大化按钮的窗口

Qt.WindowMinimizeButtonHint

激活最小化按钮的窗口

Qt.WindowMinMaxButtonsHint

激活最小化和最大化按钮的窗口

Qt.WindowCloseButtonHint

添加一个关闭按钮的窗口

Qt.WindowContextHelpButtonHint

添加像对话框一样的问号(?)和关闭按钮

Qt.WindowStaysOnTopHint

使窗口始终处于顶层位置

Qt.WindowStaysOnBottomHint

使窗口始终处于底层位置

例如,下面代码用来设置名称为MainWindow的窗口只有关闭按钮,而没有最大化、最小化按钮:

MainWindow.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)    #只显示关闭按钮

四、具体应用

注意:需要将设置窗口样式的代码放在setupUi()函数之后执行。

import sys
#程序入口,程序从此处启动PyQt设计的窗口
from PyQt5.QtWidgets import QApplication, QMainWindow
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()      #创建窗口对象
    ui = Ui_MainWindow()            #创建PyQt设计的窗口对象
    ui.setupUi(MainWindow)          #调用PyQt窗体的方法对窗体对象进行初始化设置
    MainWindow.setWindowFlags(QtCore.Qt.Window)
    MainWindow.show()               #显示窗体
sys.exit(app.exec_())               #程序关闭时退出进程
<think>嗯,用户想用PyQt5设计一个健康管理系统的功能界面。我需要先理解用户的需求,然后根据现有的PyQt5知识来构建解决方案。首先,健康管理系统通常包括哪些功能呢?可能包括数据录入、统计展示、提醒设置等模块。用户可能需要一个主界面,包含导航和各个功能区域。 接下来,我应该考虑PyQt5的布局管理,比如使用QTabWidget来分模块,或者用QStackedWidget切换不同页面。然后,每个功能模块需要哪些控件?比如数据录入可能需要表单,统计展示可能需要图表,提醒设置可能需要日历和时间选择器。 还要参考用户提供的引用内容,里面提到了PyQt5 Designer的使用和布局方法。比如引用[3]提到垂直布局和水平布局的应用,这可以帮助设计各个部分的排列。同时,引用[2]提到Designer工具,虽然用户现在可能直接写代码,但代码结构可以参考Designer生成的布局。 然后,代码示例的结构应该清晰,包括主窗口、各个功能模块的控件添加和布局。比如主窗口使用QMainWindow,左侧用列表导航,右侧用QStackedWidget来切换不同页面。每个页面用QVBoxLayout或QGridLayout来排列控件。 另外,用户可能需要了解如何将界面与功能逻辑连接,比如按钮点击事件绑定数据处理函数。但用户当前的问题可能主要集中在界面设计,所以示例代码可能先展示界面结构,再简要提及逻辑部分。 还需要注意引用的格式,在回答中适当添加引用标识,比如讲解布局时引用[3],提到Designer时引用[2]。同时生成相关问题,帮助用户深入探索,比如性能优化、数据可视化等。 最后,确保代码符合PyQt5的语法,使用正确的类和方法,比如QLineEdit、QPushButton、QVBoxLayout等,并保持代码简洁,注释清晰,方便用户理解。</think># 基于PyQt5的健康管理系统界面设计示例 ### 一、基础框架搭建 ```python import sys from PyQt5.QtWidgets import * class HealthSystem(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 主窗口设置 self.setWindowTitle('健康管理系统 v1.0') self.setGeometry(300, 100, 1200, 800) # 创建中央部件和主布局 central_widget = QWidget() self.setCentralWidget(central_widget) main_layout = QHBoxLayout(central_widget) # 左侧导航栏 self.nav_list = QListWidget() self.nav_list.addItems(['数据录入', '健康统计', '提醒设置', '个人档案']) main_layout.addWidget(self.nav_list, stretch=1) # 右侧功能区域 self.stacked_widget = QStackedWidget() main_layout.addWidget(self.stacked_widget, stretch=4) # 初始化各功能页面 self.create_data_entry_page() self.create_statistics_page() self.create_reminder_page() self.create_profile_page() ``` ### 二、核心功能界面设计 #### 1. 数据录入模块(使用网格布局) ```python def create_data_entry_page(self): page = QWidget() layout = QGridLayout(page) # 第一行组件 layout.addWidget(QLabel("测量时间:"), 0, 0) self.time_edit = QDateTimeEdit() layout.addWidget(self.time_edit, 0, 1) # 第二行组件 layout.addWidget(QLabel("身高(cm):"), 1, 0) self.height_spin = QDoubleSpinBox() layout.addWidget(self.height_spin, 1, 1) # 第三行组件 layout.addWidget(QLabel("体重(kg):"), 2, 0) self.weight_edit = QLineEdit() layout.addWidget(self.weight_edit, 2, 1) # 提交按钮 submit_btn = QPushButton("保存记录") submit_btn.clicked.connect(self.save_record) layout.addWidget(submit_btn, 3, 0, 1, 2) self.stacked_widget.addWidget(page) ``` #### 2. 健康统计模块(包含图表展示) ```python def create_statistics_page(self): page = QWidget() layout = QVBoxLayout(page) # 图表展示区域 self.chart_view = QGraphicsView() layout.addWidget(self.chart_view, stretch=3) # 时间范围选择 time_group = QGroupBox("统计周期") time_layout = QHBoxLayout(time_group) self.day_radio = QRadioButton("日统计") self.month_radio = QRadioButton("月统计") time_layout.addWidget(self.day_radio) time_layout.addWidget(self.month_radio) layout.addWidget(time_group, stretch=1) self.stacked_widget.addWidget(page) ``` ### 三、界面优化技巧 1. **布局管理**:采用`QStackedWidget`实现多页面切换,配合`QListWidget`导航菜单[^3] 2. **样式美化**: ```python self.setStyleSheet(""" QMainWindow { background: #f0f8ff; } QListWidget { background: #e6f3ff; font-size: 14px; } QGroupBox { border: 2px solid gray; margin-top: 10px; } """) ``` 3. **响应式设计**:使用`QSizePolicy`设置控件的扩展策略,确保窗口缩放时界面元素自动适应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值