首页 > 解决方案 > 构造函数中的 PyQt 实例变量

问题描述

在“Rapid GUI Programming with Python and Qt”中,作者在第 4 章给出了这个例子。

在我看来dialspinbox, 和layout会超出范围。为什么我们可以使用dial代替self.dialspinbox代替self.spinboxlayout代替self.layout?这是一个好的做法还是更好地self.用于所有 GUI 元素?

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        dial = QDial()
        dial.setNotchesVisible(True)
        spinbox = QSpinBox()

        layout = QHBoxLayout()
        layout.addWidget(dial)
        layout.addWidget(spinbox)
        self.setLayout(layout)

        self.connect(dial, SIGNAL("valueChanged(int)"),
                 spinbox.setValue)
        self.connect(spinbox, SIGNAL("valueChanged(int)"),
                 dial.setValue)
        self.setWindowTitle("Signals and Slots")

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

标签: pythonpyqt

解决方案


是的,这些变量超出了范围。

但是由于有对底层对象的引用(通过布局和self.setLayout),这并不是一个真正的问题,即小部件/对象没有被破坏。

如果您不需要在代码的其他部分中直接访问它们,那么就可以了。


推荐阅读