我是这种语言的新手,我正在使用PyQt开展项目。
对于那些熟悉PyQt的人,我使用Qt Designer创建了.ui文件,然后尝试在python中加载它。
我发现一个非常奇怪的'的事情。
基本上,我的UI不适用于以下代码:
def main():
app = QW.QApplication(sys.argv)
loadUi('my-ui/mainwindow.ui').show()
sys.exit(app.exec_())
没有错误信息,窗口根本不显示。
但是,如果我将代码更改为:
def main():
app = QW.QApplication(sys.argv)
w = loadUi('my-ui/mainwindow.ui')
w.show()
sys.exit(app.exec_())
它就像魔法一样!
我现在真的很困惑。在分配期间Python中会发生什么?
你知道,我唯一改变的是添加作业。
答案 0 :(得分:1)
在赋值期间发生的事情,除了将对象绑定到名称(w
)之外,python还会增加对象的引用计数。也就是说,从其他任何地方(即另一个对象或变量)引用该对象的计数。
达到引用计数为零的对象被删除/"垃圾收集",因为通常现在程序代码可以与它们进行交互了。
所以在你的第一个版本中发生了什么,你正在创建小部件,但由于任何地方都没有引用(与你的第二个代码截断相反),它会在行 完成了。 在文件PyQt documenation中还有一个(相当)简短的说明。
当然,对于一般的python垃圾收集,当然有很多,例如this question loadUi('my-ui/mainwindow.ui').show()