相关文章推荐
难过的大熊猫  ·  使用yarn+env-cmd时,如何在cre ...·  4 月前    · 
发财的李子  ·  js 使用预签名(presigned) ...·  3 月前    · 
玩命的葫芦  ·  在客户端直接上传文件到OSS-对象存储(OS ...·  3 月前    · 
没有腹肌的围巾  ·  Google試算表與Google App ...·  3 月前    · 
健壮的野马  ·  如何使用vim删除每行中的最后一个字符?开发者社区·  3 月前    · 
豪爽的热水瓶  ·  How to export a Hive ...·  11 月前    · 
爱跑步的口罩  ·  CSS position ...·  3 年前    · 
谈吐大方的斑马  ·  db2怎么列出当前数据库下所有表占用空间的大 ...·  3 年前    · 
Code  ›  PySide6 GUI 编程(2):窗口设置与基础控件开发者社区
gui 软件
https://cloud.tencent.com/developer/article/2418626
英勇无比的筷子
8 月前
密码学人CipherHUB

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

原创
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
密码学人CipherHUB
社区首页 > 专栏 > PySide6 GUI 编程(2):窗口设置与基础控件

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

原创
作者头像
密码学人CipherHUB
修改 于 2024-05-19 17:09:10
修改 于 2024-05-19 17:09:10
1.8K 1
举报
文章被收录于专栏: 编码视界 编码视界

自定义窗口

代码示例

代码语言: 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 参数是必需的,原因如下:

  • 父对象引用: self 是 MyPushButton 类的 实例引用 ,将其传递给 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 输入框')
 
推荐文章
难过的大熊猫  ·  使用yarn+env-cmd时,如何在create-react-app的public目录JS文件注入环境变量?
4 月前
发财的李子  ·  js 使用预签名(presigned) url 上传文件到 AWS S3服务(解决生成的文件格式错误问题)_getpresigneduploadurl
3 月前
玩命的葫芦  ·  在客户端直接上传文件到OSS-对象存储(OSS)-阿里云帮助中心
3 月前
没有腹肌的围巾  ·  Google試算表與Google App Script的自動化應用
3 月前
健壮的野马  ·  如何使用vim删除每行中的最后一个字符?开发者社区
3 月前
豪爽的热水瓶  ·  How to export a Hive table into a CSV file? - Stack Overflow
11 月前
爱跑步的口罩  ·  CSS position 相对定位和绝对定位 | 菜鸟教程
3 年前
谈吐大方的斑马  ·  db2怎么列出当前数据库下所有表占用空间的大小_百度知道
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号