我对将“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”)时,您可以避免两个问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句