python - 构造函数中的 PyQt 实例变量
问题描述
在“Rapid GUI Programming with Python and Qt”中,作者在第 4 章给出了这个例子。
在我看来dial
,spinbox
, 和layout
会超出范围。为什么我们可以使用dial
代替self.dial
,spinbox
代替self.spinbox
和layout
代替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_()
解决方案
是的,这些变量超出了范围。
但是由于有对底层对象的引用(通过布局和self.setLayout),这并不是一个真正的问题,即小部件/对象没有被破坏。
如果您不需要在代码的其他部分中直接访问它们,那么就可以了。
推荐阅读
- c# - 如何传递 ObservableCollection 的类型
- html - 检查表单帖子中丢失的文件
- apache-kafka - Kafka Stream中幂等性和exactly-once的区别
- php - 非常灵活的应用程序的数据库/应用程序设计
- google-maps - Google maps place api - 根据要求找不到任何内容
- http - 通过从浏览器到服务器的简单 HTTP HEAD 请求使用 Javascript 来测量 Internet ping 速度,使用 socket.io 有什么优势吗?
- android - Android 开源项目构建错误`FAILED: out/soong/build.ninja`
- android - 如何通过登录从 Github 用户获取令牌?
- mysql - MySQL inner join changes column value
- cmake - cmake - 使用自定义编译选项构建目标