Loading [MathJax]/jax/output/CommonHTML/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PySide6 GUI 编程(2):窗口设置与基础控件

PySide6 GUI 编程(2):窗口设置与基础控件

原创
作者头像
密码学人CipherHUB
修改于 2024-05-19 09:09:10
修改于 2024-05-19 09:09:10
1.1K146
代码可运行
举报
文章被收录于专栏:编码视界编码视界
运行总次数:46
代码可运行

自定义窗口

代码示例

代码语言:python
代码运行次数:22
运行
AI代码解释
复制
from PySide6.QtCore import QSize
from PySide6.QtWidgets import QApplication, QMainWindow

class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('My App Window 我的自定义窗口')
        self.setToolTip('My App Tip Info 这是我的自定义窗口的提示信息')
        # 设置窗口的固定大小,长 400,宽 300
        self.setFixedSize(QSize(400, 300))

if __name__ == '__main__':
    app = QApplication([])
    window = MyMainWindow()
    window.show()
    app.exec()

代码分析

自定义窗口类

上述代码中,class MyMainWindow(QMainWindow):定义了一个名为 MyMainWindow 的类,它继承自 QMainWindow 类。QMainWindow 是Qt框架中用于创建和管理主窗口的一个类,这意味着 MyMainWindow 类将拥有 QMainWindow 的所有功能和属性。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
    def __init__(self):
        super().__init__()

这行代码调用了父类 QMainWindow 的构造函数,确保了父类被正确初始化。super() 函数用于访问父类的方法和属性。

设置窗口标题

设置窗口标题:self.setWindowTitle('My App Window 我的自定义窗口'),这个标题会显示在窗口的标题栏上。

设置窗口提示信息

设置窗口的工具提示信息:self.setToolTip('My App Tip Info 这是我的自定义窗口的提示信息'),当用户将鼠标悬停在窗口上时,这个提示信息会显示为一个小型弹出窗口。

设置窗口固定大小

设置窗口固定大小:self.setFixedSize(QSize(400, 300)),使用 setFixedSize 方法设置窗口的固定大小,参数 QSize(400, 300) 指定了窗口的宽度为400像素,高度为300像素。这会禁止用户调整窗口大小,窗口大小将被锁定为指定的尺寸。

最终运行效果

运行效果
运行效果

基础控件

QPushButton

写法一

代码语言:python
代码运行次数:8
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QPushButton

app = QApplication([])

window = QPushButton("Push Me 这是一个按钮")
window.setToolTip('Tip Info 这是按钮的提示信息')
window.show()
app.exec()
按钮效果
按钮效果

写法二

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
class MyPushButton(QMainWindow):
    def __init__(self):
        super().__init__()
        QPushButton('自定义 QPushButton', self).setToolTip('我的自定义 button 实例')


if __name__ == '__main__':
    app = QApplication()
    button = MyPushButton()
    button.show()
    app.exec()
运行效果
运行效果

QPushButton 构造函数中的 self 参数是必需的,原因如下:

  • 父对象引用:selfMyPushButton 类的实例引用,将其传递给 QPushButton 意味着正在创建一个子控件(按钮),它属于 MyPushButton 窗口。
  • 内存管理:在Qt中,当父对象被销毁时,其所有子对象也会自动被销毁。通过将 self 作为父对象传递给 QPushButton,确保了按钮会被正确地管理,并且当 MyPushButton 窗口被销毁时,按钮也会随之销毁。
  • 事件处理:子控件通常会将事件(如鼠标点击、键盘输入等)传递给它们的父对象。通过指定 self 作为父对象,按钮能够将事件传递给 MyPushButton 类的实例,允许在类中处理这些事件。
  • 布局管理:在Qt中,控件的布局是基于父子关系来管理的。指定 self 作为父对象可以确保按钮被正确地放置在窗口内,并且可以利用布局管理器来自动调整按钮的位置和大小。
  • 绘图和焦点:父对象负责绘制其子对象,并且焦点策略也依赖于父子关系来确定焦点顺序。 因此,在 MyPushButton 类中创建一个 QPushButton 实例并将其添加到窗口时,传递 self 作为父对象是至关重要的,它确保了按钮能够正常工作并集成到窗口中。 如果不传递父对象,QPushButton 将无法正确地与窗口交互,也无法利用Qt框架提供的各种功能。

QLabel

写法一

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QLabel

app = QApplication([])
label = QLabel('Label Text 这是一个标签')
label.setToolTip('Tip Info 这是标签的提示信息')
label.show()

app.exec()
运行效果
运行效果

写法二

代码语言:python
代码运行次数:9
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow
class MyLabel(QMainWindow):
    def __init__(self):
        super().__init__()
        QLabel('MyLabel', self).setToolTip('我的自定义 label 实例')
if __name__ == '__main__':
    app = QApplication()
    button = MyLabel()
    button.show()
    app.exec()
运行效果
运行效果

QLineEdit

写法一

代码语言:python
代码运行次数:5
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QLineEdit
app = QApplication([])
window = QLineEdit()
window.setWindowTitle('LineEdit 输入框')
window.setPlaceholderText('请输入内容')
window.show()
app.exec()
运行效果
运行效果

写法二

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QLineEdit, QMainWindow

class MyLineEdit(QMainWindow):
    def __init__(self):
        super().__init__()
        ins = QLineEdit(self)
        ins.setPlaceholderText('请输入内容')

if __name__ == '__main__':
    app = QApplication()
    line_edit = MyLineEdit()
    line_edit.setWindowTitle('QLineEdit 输入框')
    line_edit.show()
    app.exec()
运行效果
运行效果
对于 QLineEdit 设置标题时需要注意的点

对于以下代码:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from PySide6.QtWidgets import QApplication, QLineEdit, QMainWindow

class MyLineEdit(QMainWindow):
    def __init__(self):
        super().__init__()
        ins = QLineEdit(self)
        ins.setPlaceholderText('请输入内容')
        # 这里的标题不会生效!!!
        ins.setWindowTitle('QLineEdit 输入框')

if __name__ == '__main__':
    app = QApplication()
    line_edit = MyLineEdit()
    # line_edit.setWindowTitle('QLineEdit 输入框')
    line_edit.show()
    app.exec()
不展示标题
不展示标题

PySide6(以及Qt框架中),QLineEdit 是一个用于输入文本的行编辑控件, 在Qt中,窗口标题通常与 QMainWindowQWidget 类相关联,它们是能够提供完整窗口装饰(如标题栏、边框、状态栏等)的窗口控件。

如果希望标题显示出来,需要将其设置在主窗口上,也就是 MyLineEdit 类本身,因为 QMainWindow 是具有窗口标题和完整窗口装饰的顶级窗口控件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
666
666
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
PySide6 GUI 编程(6):QPushButton的使用
密码学人CipherHUB
2024/07/20
6242
PySide6 GUI 编程(6):QPushButton的使用
PySide6 GUI 编程(40):MVC 设计原则下QListView的使用
代码应该遵循MVC(模型-视图-控制器)设计原则,将数据模型、视图和控制器分离,以便于维护和扩展。
密码学人CipherHUB
2024/09/01
5131
PySide6 GUI 编程(40):MVC 设计原则下QListView的使用
PySide6 GUI 编程(38):信号拦截与 lambda 槽函数
在之前的文章:PySide6 GUI 编程(3):信号槽机制中已经探讨过关于自定义信号的场景。在一些更追求灵活性的场景下,我们需要自定义信号,以此触发更多自定义的行为。
密码学人CipherHUB
2024/08/31
1.2K0
PySide6 GUI 编程(38):信号拦截与 lambda 槽函数
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C++ 框架,用于构建桌面应用程序。通过 PyQt5,我们可以用 Python 轻松构建跨平台的桌面应用程序,支持 Windows、macOS 和 Linux。
半截诗
2024/10/09
37K0
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
PySide6 GUI 编程(7):QLabel的使用
密码学人CipherHUB
2024/07/20
5191
PySide6 GUI 编程(7):QLabel的使用
PySide6 GUI 编程(31):多个 QWidget 窗口展示
进程在刚启动时会初始化出两个窗口,这可以证明 init_new_window() 返回的对象是可以正常展示的
密码学人CipherHUB
2024/08/21
7543
PySide6 GUI 编程(31):多个 QWidget 窗口展示
基于PySide6的GUI程序开发全流程(看完就会)
GUI程序的开发方式太多了,这里肯定就是Python语言了,至于为什么,就不多描述了;
MinChess
2023/09/29
16.5K0
基于PySide6的GUI程序开发全流程(看完就会)
PySide6 GUI 编程(23):MenuBar 与 ToolBar搭配使用
密码学人CipherHUB
2024/07/31
6630
PySide6 GUI 编程(23):MenuBar 与 ToolBar搭配使用
PySide6 GUI 编程(11):QLineEdit的使用
密码学人CipherHUB
2024/07/22
3971
PySide6 GUI 编程(11):QLineEdit的使用
PySide6 GUI 编程(21):QFormLayout的简单用法
密码学人CipherHUB
2024/07/30
2410
PySide6 GUI 编程(21):QFormLayout的简单用法
PySide6 GUI 编程(35):QPalette 小结
密码学人CipherHUB
2024/08/26
3901
PySide6 GUI 编程(35):QPalette 小结
PySide6 GUI 编程(32):QMouseEvent 鼠标事件
密码学人CipherHUB
2024/08/23
6231
PySide6 GUI 编程(32):QMouseEvent 鼠标事件
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
文章目录 1. 状态栏 2. 窗口居中显示 3. 关闭窗口 4. QWidget 5. 添加图标 6. 气泡提示信息 7. QLabel 添加快捷键 8. QLineEdit echoMode 验证器 inputMask 综合练习 9. QTextEdit learn from 《PyQt5 快速开发与实战》 1. 状态栏 self.statusbar.showMessage("hello, Michael", 2000),第二个参数是显示多长时间ms,默认无限长时间 # -*- coding: utf-8
Michael阿明
2022/05/10
2.8K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
PySide6 GUI 编程(33):重载右键上下文菜单 contextMenuEvent
密码学人CipherHUB
2024/08/23
3571
PySide6 GUI 编程(33):重载右键上下文菜单 contextMenuEvent
PySide6 GUI 编程(18):QGridLayout的简单用法
密码学人CipherHUB
2024/07/29
4600
PySide6 GUI 编程(18):QGridLayout的简单用法
PySide6 GUI 编程(16):QTimer 的简单用法
密码学人CipherHUB
2024/07/25
5680
PySide6 GUI 编程(16):QTimer 的简单用法
PySide6 GUI 编程(22):QToolBar的简单用法
密码学人CipherHUB
2024/07/31
4370
PySide6 GUI 编程(22):QToolBar的简单用法
PySide6 GUI 编程(24):QDialog以及QDialogButtonBox
QDialog 自身运行时会触发一个事件循环, 这个事件循环与 QApplication 的事件循环并没有显著的从属关系,可以认为它们是独立的。
密码学人CipherHUB
2024/08/08
7472
PySide6 GUI 编程(24):QDialog以及QDialogButtonBox
PySide6 GUI 编程(8):QCheckBox的使用
密码学人CipherHUB
2024/07/21
6341
PySide6 GUI 编程(8):QCheckBox的使用
PySide6 GUI 编程(9):QComboBox的使用
在 macOS 系统上,QComboBox 的 setPlaceholderText 方法可能不会按预期工作,因为 macOS 的用户界面指南通常不支持在组合框中使用占位符文本。
密码学人CipherHUB
2024/07/21
7791
PySide6 GUI 编程(9):QComboBox的使用
推荐阅读
相关推荐
PySide6 GUI 编程(6):QPushButton的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档