前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PySide6 GUI 编程(2):窗口设置与基础控件

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

原创
作者头像
bowenerchen
修改2024-05-19 17:09:10
1590
修改2024-05-19 17:09:10
举报
文章被收录于专栏:编码视界编码视界

自定义窗口

代码示例

代码语言:python
复制
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
复制
    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
复制
from PySide6.QtWidgets import QApplication, QPushButton

app = QApplication([])

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

写法二

代码语言:python
复制
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
复制
from PySide6.QtWidgets import QApplication, QLabel

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

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

写法二

代码语言:python
复制
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
复制
from PySide6.QtWidgets import QApplication, QLineEdit
app = QApplication([])
window = QLineEdit()
window.setWindowTitle('LineEdit 输入框')
window.setPlaceholderText('请输入内容')
window.show()
app.exec()
运行效果
运行效果

写法二

代码语言:python
复制
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
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义窗口
    • 代码示例
      • 代码分析
        • 自定义窗口类
        • 设置窗口标题
        • 设置窗口提示信息
        • 设置窗口固定大小
        • 最终运行效果
    • 基础控件
      • QPushButton
        • 写法一
        • 写法二
      • QLabel
        • 写法一
        • 写法二
      • QLineEdit
        • 写法一
        • 写法二
    相关产品与服务
    腾讯云代码分析
    腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档