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

黑暗之王

我对将“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 通常在许多应用程序中使用。

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

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

  • 对象具有更长的生命周期(与窗口相同)。
  • 然后将小部件(QLabel 或 QLineEdit)放置在窗口顶部。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

为什么/为什么有些类需要每个可能的参数,而有些则不需要?

来自分类Dev

为什么有些C#api方法需要[HttpPost]而有些则不需要?

来自分类Dev

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

来自分类Dev

为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

来自分类Dev

为什么有些程序需要-h而另一些则不需要

来自分类Dev

为什么有些程序需要安装,而其他程序则不需要?

来自分类Dev

为什么有些类需要main方法,而另一些则不需要呢?

来自分类Dev

为什么有些角度指令需要双重卷曲,而另一些则不需要?

来自分类Dev

为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

来自分类Dev

为什么有些工具(例如 dd)不需要挂载点来处理设备?

来自分类Dev

为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

来自分类Dev

为什么有些文本在WPF中会消失,而有些则不会

来自分类Dev

正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

来自分类Dev

为什么“尝试/捕获”中的命令有时需要-ErrorAction停止,而有时则不需要?

来自分类Dev

为什么有些函数参数存储在堆栈上而有些存储在堆上?

来自分类Dev

为什么有些非root程序可以双击执行而有些则不能?

来自分类Dev

为什么有些数组值会被覆盖,而有些则不会呢?的PHP

来自分类Python

清除pyqt中布局中的所有小部件

来自分类Dev

为什么某些内置javascript方法是静态的而有些则不是呢?

来自分类Dev

覆盖pyqt中现有小部件的绘画事件

来自分类Dev

为什么有些原语有字节码,而有些则没有?

来自分类Dev

PyQt connect中的参数

来自分类Dev

为什么有些 URL 被“禁止”而有些不在我的 Web 应用程序中

来自分类Python

pyqt:如何删除小部件?

来自分类Dev

PyQt GridLayout合并小部件

来自分类Dev

PySide/PyQt 覆盖小部件

来自分类Dev

为什么有些 Angular 模块会导入而有些却不会?

来自分类Dev

为什么有些快照很快,而有些快照那么慢?

Related 相关文章

  1. 1

    为什么有些库需要嵌入而有些则不需要?

  2. 2

    为什么/为什么有些类需要每个可能的参数,而有些则不需要?

  3. 3

    为什么有些C#api方法需要[HttpPost]而有些则不需要?

  4. 4

    为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

  5. 5

    为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

  6. 6

    为什么有些程序需要-h而另一些则不需要

  7. 7

    为什么有些程序需要安装,而其他程序则不需要?

  8. 8

    为什么有些类需要main方法,而另一些则不需要呢?

  9. 9

    为什么有些角度指令需要双重卷曲,而另一些则不需要?

  10. 10

    为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

  11. 11

    为什么有些工具(例如 dd)不需要挂载点来处理设备?

  12. 12

    为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

  13. 13

    为什么有些文本在WPF中会消失,而有些则不会

  14. 14

    正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

  15. 15

    为什么“尝试/捕获”中的命令有时需要-ErrorAction停止,而有时则不需要?

  16. 16

    为什么有些函数参数存储在堆栈上而有些存储在堆上?

  17. 17

    为什么有些非root程序可以双击执行而有些则不能?

  18. 18

    为什么有些数组值会被覆盖,而有些则不会呢?的PHP

  19. 19

    清除pyqt中布局中的所有小部件

  20. 20

    为什么某些内置javascript方法是静态的而有些则不是呢?

  21. 21

    覆盖pyqt中现有小部件的绘画事件

  22. 22

    为什么有些原语有字节码,而有些则没有?

  23. 23

    PyQt connect中的参数

  24. 24

    为什么有些 URL 被“禁止”而有些不在我的 Web 应用程序中

  25. 25

    pyqt:如何删除小部件?

  26. 26

    PyQt GridLayout合并小部件

  27. 27

    PySide/PyQt 覆盖小部件

  28. 28

    为什么有些 Angular 模块会导入而有些却不会?

  29. 29

    为什么有些快照很快,而有些快照那么慢?

热门标签

归档