在 PyQT 中,为什么有些小部件在调用它们之前需要“self”参数,而其他小部件则不需要

2023-11-29

我对“self”参数与某些小部件(例如(QLineEdit))的使用有点困惑,事实上,在学习使用 QLabel 小部件时,我曾经在没有 self 参数的情况下调用该类,或者在使用 QLineEdit 小部件时,如果没有“self”参数,小部件将无法工作,这是我正在处理的代码:

# Import necessary modules
import sys

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton
from PyQt5.QtCore import Qt

class EntryWindow(QWidget): # Inherits QWidget

def __init__(self): # Constructor
    super().__init__() # Initializer which calls constructor for QWidget

    self.initializeUI() # Call function used to set up window

def initializeUI(self):
    """
    Initialize the window and display its contents to the screen
    """
    self.setGeometry(400, 300, 400, 200)
    self.setWindowTitle('QLineEdit Widget')
    self.displayWidgets()

    self.show() # Show everything

def displayWidgets(self):
    '''
    Setup the QLineEdit and other widgets.
    '''
    # Create name label and line edit widgets
    QLabel("Please enter your name below.", self).move(100, 20)
    name_label = QLabel("Name:", self)
    name_label.move(55, 70)

    self.name_entry = QLineEdit(self)
    self.name_entry.move(120, 68)
    self.name_entry.resize(200, 25) # Change size of entry field

    self.name_entry.setAlignment(Qt.AlignLeft) # The default alignment

    
    text_font = self.name_entry.font() # Get font option from the Qlineedit
    text_font.setPointSize(12)         # Modify font size
    #text_font.setBold(True)           # Bold
    self.name_entry.setFont(text_font) # Apply font
    

    self.clear_button = QPushButton('Clear text', self)
    self.clear_button.clicked.connect(self.clearEntries)
    self.clear_button.move(120, 130)

    self.exit_button = QPushButton("Exit", self)
    self.exit_button.clicked.connect(self.exitApplication)
    self.exit_button.move(240, 130)

def clearEntries(self):
    
    sender = self.sender()
    if sender.text() == 'Clear text':
        self.name_entry.clear()

def exitApplication(self):

    sender = self.sender()
    if sender.text() == "Exit":
        self.close() # Close the window

   # Run program
   if __name__ == '__main__':
       app = QApplication(sys.argv)
       window = EntryWindow()
       sys.exit(app.exec_())

所以这就是我感到困惑的地方,当使用 QLabel 时,我之前不必放置“self”参数,或者当使用 QLineEdit 时,我必须放置“self”,否则我的代码将无法工作:

QLabel("Please enter your name below.", self).move(100, 20)
self.name_entry = QLineEdit(self)

首先,问题或差异与“自我”无关,而是为了什么,Qt设计中预先制定的规则。

在 Qt 中,QObject 之间存在一个层次结构树,其中父 QObject 管理内存(其子对象的生命周期),因此如果父对象删除了子对象,它们也将被删除。这可以避免内存泄漏,因为许多 QObject 通常在许多应用程序中使用。

另一方面,这种亲属关系的概念也传递给了 QWidget,因为它们也是 QObject,但还有另一个特征:QWidget 通常会在其父级之上绘制。因此,如果您希望 QLineEdit 和 QLabel 成为窗口的一部分,那么它们必须是窗口的子级,因此有必要将“self”窗口对象作为父级传递。

因此,当您走到窗口(在本例中为“自己”)时,您可以避免两个问题:

  • 表明该对象有更长的生命周期(与窗口相同)。
  • 然后您将小部件(QLabel 或 QLineEdit)放置在窗口顶部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PyQT 中,为什么有些小部件在调用它们之前需要“self”参数,而其他小部件则不需要 的相关文章

  • Spyder 和 Jupyter 有什么区别?

    我正在学习Python用于数据科学 但我的问题是我仍然不明白Spyder和Jupyter之间的区别 我希望你们能帮助我理解其中的区别 我将不胜感激 以下只是这两个工具的基本摘要 Jupyter 是一个非常流行的用于数据分析的应用程序 它是一
  • Firefox 中的文件下载对话框

    我正在使用firefox进行selenium python编程 自动开始下载并保存文件 我已经完成了所有操作 但无法下载csv文件 我的python版本是2 6 6 我的selenium版本是最新版本 我也尝试使用以下链接 即 fp web
  • Python:如果满足条件,则循环遍历一个字典并在新字典中创建键/值对

    我想将一个字典的值与第二个字典的值进行比较 如果值满足特定条件 我想创建第三个字典 其中的键和值对将根据匹配情况而变化 这是一个显示我的问题的人为示例 编辑 对所有返回感到抱歉 但堆栈溢出无法识别单个返回 并且在一行上运行 3 4 行 使代
  • 扭曲多种协议

    我希望为我正在从事的项目学习扭曲 该项目需要服务器响应 HTTP 请求以及通过 TCP 连接的其他协议 Twisted能够同时处理多种协议吗 我想使用 Twisted Web 来帮助处理 HTTP 但同时需要响应其他端口上的 TCP 连接
  • 配置 PIP 以在代理后面工作

    我已经安装了 python 3 4 3 附带pip 我想从代理后面使用 pip 所以我执行了以下操作 Created C Users foo pip pip ini并添加了代理配置部分 proxy export http proxy my
  • 如何从 Windows 7 PC 上完全卸载 Python 2.7

    从这里安装了Python 2 7 https www python org downloads release python 279 https www python org downloads release python 279 然后我
  • 绘制对数轴

    我想使用 matplotlib 绘制一张带有一个对数轴的图 我一直在阅读文档 但无法弄清楚语法 我知道这可能很简单 scale linear 在情节争论中 但我似乎无法正确理解 示例程序 import pylab import matplo
  • 如何将数据从 JavaScript 发送到 Python

    我正在 jinja2 和 python2 7 上使用 GAE 进行 Web 开发 我可以从Python获取数据 但我无法将数据从 JavaScript 发送到 Python 这是 JavaScript 代码 function toSave
  • 打开文件路径在 python 中不起作用[重复]

    这个问题在这里已经有答案了 我正在编写一个数据库程序 personica 是我的测试主题 我通常在文件路径的位置有一个变量 但出于测试和演示的目的 我只有一个字符串 在我的计算机上的这个确切位置有一个文本文件 顺便说一句 因为我很偏执 所以
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • 使用 scipy、python、numpy 进行非线性 e^(-x) 回归

    下面的代码为我提供了一条最佳拟合线的平坦线 而不是沿着 e x 模型的一条适合数据的漂亮曲线 谁能告诉我如何修复下面的代码以使其适合我的数据 import numpy as np import matplotlib pyplot as pl
  • ipython/jupyter 中的 tk 问题

    我正在尝试编写一个用于从 ipython jupyter 笔记本启动的 gui 但在笔记本中使用 tkinter 时遇到了麻烦 特别是在让 tk gui 窗口正常关闭方面 如何从 jupyter 制作 启动 tkinter gui 然后在不
  • PyQt5 的 OpenGL 模块和版本控制问题(调用不正确的 _QOpenGLFunctions_(ver))

    我一直在努力得到PyQt5 helloGL 示例代码 https github com baoboa pyqt5 blob master examples opengl hellogl py编译 当我尝试构建解决方案时 我得到 Traceb
  • 自动创建带有文件输出的目录[重复]

    这个问题在这里已经有答案了 假设我想制作一个文件 filename foo bar baz txt with open filename w as f f write FOOBAR 这给出了一个IOError since foo bar不存
  • 如何在 FastAPI Swagger API 中按方法类型对方法进行排序?

    如何在 FastAPI Swagger 自动文档中设置 API 方法的排序顺序 我希望所有方法按类型分组 GET POST PUT DELETE 这个答案 https stackoverflow com questions 24951268
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • Tensorflow `tf.layers.batch_normalization` 不会向 `tf.GraphKeys.UPDATE_OPS` 添加更新操作

    以下代码 复制 粘贴可运行 说明了如何使用tf layers batch normalization import tensorflow as tf bn tf layers batch normalization tf constant
  • 如何将 Django 数据库中的模板标签解释/渲染为 HTML

    我正在尝试添加带有来自 Django 管理站点的图像的帖子 但安全 自动转义关闭过滤器无法解释 Django 的模板标签 My input and page look like 复制图像地址 给出http 127 0 0 1 8000 7B
  • 类unix系统中的python和python3命令有什么区别?

    我通读了每个命令的描述 但每个命令的描述都是完全相同的 所以我不明白这两个命令在类 Unix 系统中的工作方式有何不同 谁能解释其中的区别吗 Python3命令的引入是因为python命令指向了python2 从那时起 Python3 已成
  • 如何使用 PySpark 预处理图像?

    我有一个项目 需要为 1 设置大数据架构 AWS S3 SageMaker 的概念验证使用 PySpark 预处理图像 2 执行 PCA and 3 训练一些机器或深度学习模型 我的问题是了解如何使用 PySpark 操作图像数据 但无法在

随机推荐

  • 有什么方法可以知道数组列表是否包含一段文本?

    我有一个包含多个项目的数组列表 假设它们是 深棕色 蓝色 绿色 有什么方法可以查找我的某些商品中是否有字符串 DARK 我知道 contains 可以做到这一点 但只有当字符串完全正确时它才会这样做 我的想法是寻找以我的项目之一开头但没有所
  • 参考qt快速控制选项卡视图中的错误

    我用TabView编写了一个QT Quick程序 当我单击 Tabview 中的按钮 b1 时 程序应该调用 show text 并打印 b1 的文本 但它打印 ReferenceError b1 未定义 任何建议将不胜感激 谢谢 impo
  • 将 glut 链接到 Qt

    我想将 OpenGL 与 glut 结合到 Qt 中 我正在使用 Windows 我的 Qt 版本是 4 7 4 32 位 我按照教程进行操作 http www youtube com watch v 1nzHSkY4K18 我还查了一些人
  • SQL 年度总和报告,寻找优雅的解决方案

    我有一个包含 3 列的表 ItemCode Quantity 和 DocDate 我想以更 优雅 的方式创建以下报告 SELECT T0 ItemCode SELECT SUM QUANTITY FROM MyTable T1 WHERE
  • spring-boot-maven-plugin 打破了同级模块依赖

    我有一个多模块 Maven 设置 一个父模块 加上两个子模块 子模块 A 和 B 模块 B 依赖于 A 但是 如果我在模块 A 中使用 spring boot maven plugin 则编译依赖关系不会得到解决 模块 B 的编译目标将抛出
  • 动态改变过滤器表达式

    我有一系列记录 该数组将根据用户的权限显示不同的记录 因此我必须根据用户使用不同的过滤器 我如何创建这样一个表达式 它根据用户的许可采用变量函数 div item name 其中表达式在范围上定义 scope filterExpr test
  • 使用 SaveChanges 的同一事务从 EF 调用 SP

    有人知道如何使用 objectContext SaveChanges 方法 EntityFramework 5 的同一事务来调用 StoredProc 吗 目标是应用对象更改并调用对数据库执行一些 魔法 的存储过程 但是 如果出现问题 无论
  • 连接到 Azure 容器注册表的 Azure 逻辑应用

    我已经在 LogicApp 中设置了 身份 在容器注册表中添加了必要的 AcrPull 访问权限 但无法让逻辑应用访问 Azure 中的私有容器注册表 出现错误 error code InaccessibleImage message Th
  • 在 C# .NET 中检查静态或动态 IP 地址?

    我正在构建一个非常基本的表单应用程序 我可以获得本地计算机上可用的 IP 地址列表 但是 我还想确定如何获取这些地址 例如 DHCP 或静态 如何判断系统上是否配置了静态 IP 地址 目标是告知新手最终用户 可能不了解网络设置或如何获取网络
  • 更改imshow的轴比例

    我正在 MATLAB 中可视化一个矩阵imshow 但是 我希望 y 和 x 轴交换位置 使 x 对应于矩阵的行索引 y 对应于列索引 我还想将轴的增量值更改为 0 01 以便第 10 行的 x 值为 0 1 第 100 行的 x 值为 1
  • 我在两个不同的系统中有一个远程存储库和两个远程存储库

    我在两个不同的系统中有一个远程存储库和两个远程存储库 在一个系统中 我将修改代码并将其推送到远程存储库 如何使用 git hooks 自动更新另一个本地存储库中的代码 如果您有一个本地存储库推送到远程存储库 并且希望更新第二个远程存储库 则
  • Java旋转图像变成全黑?

    我正在制作一个基本的java应用程序并尝试旋转图像 我写了以下快速方法 private Image rotate double degs ImageIcon img new ImageIcon src inc img char male p
  • UIImage 到字节数组

    我正在创建一个将图像上传到服务器的应用程序 它必须通过 XML 发送字节数组 如何将字节数组放入 NSString 中 Thanks 您可以将 UIImage 转换为 NSData 对象 然后从那里提取字节数组 这是一些示例代码 UIIma
  • 如何在Python中将列表初始化为特定值

    我想要一个列表 其中每个项目都设置为特定值 在我的例子中为 0 我已经用下面的代码在我的代码中解决了这个问题 但感觉很混乱 当然有更好的方法吗 maxWidths map lambda x 0 range 0 maxCols 将单元素列表乘
  • 使用 float:left 在 DIV 内垂直和水平居中图像?

    当使用 float left 将图像按行放置时 我需要一个可行的解决方案来完成将不同尺寸的图像居中到方形 div 的琐碎任务 我在 div 内部使用 div 来实现这一点 outer element wrap tile div displa
  • c gcc 编译器选项的指针算术警告

    我正在使用以下标志 但仍然无法收到此警告 类型指针void 用于算术 使用的标志 O2 Werror Wall Wno main Wno format zero length Wpointer arith Wmissing prototyp
  • 在 Outlook VBA 中更新电子邮件主题

    我正在尝试创建一个按钮控制的宏来更改电子邮件的主题 下列的这个线程我设法想出了这个 Public Sub Confidential Dim Item As Outlook MailItem Dim oInspector As Inspect
  • 使用 wp_remote_post 设置内容类型

    我怎样才能设置content type字段到application json使用该函数时在我的 HTTP 请求的标头中wp remote post 检查文档wp remote post这将为您提供一些有关如何处理远程请求的额外信息 当您使用
  • 读取EMV卡公共数据

    说我想读书publicEMV 卡的要素 我将列出一些我认为涉及的步骤 1 First select application In order to select application we must 1 find out AID of a
  • 在 PyQT 中,为什么有些小部件在调用它们之前需要“self”参数,而其他小部件则不需要

    我对 self 参数与某些小部件 例如 QLineEdit 的使用有点困惑 事实上 在学习使用 QLabel 小部件时 我曾经在没有 self 参数的情况下调用该类 或者在使用 QLineEdit 小部件时 如果没有 self 参数 小部件