Python:谁能猜到在这个任务中会发生什么?可能与PyQt有关

时间:2015-11-26 06:49:30

标签: python pyqt

我是这种语言的新手,我正在使用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中会发生什么?

你知道,我唯一改变的是添加作业。

1 个答案:

答案 0 :(得分:1)

在赋值期间发生的事情,除了将对象绑定到名称(w)之外,python还会增加对象的引用计数。也就是说,从其他任何地方(即另一个对象或变量)引用该对象的计数。

达到引用计数为零的对象被删除/"垃圾收集",因为通常现在程序代码可以与它们进行交互了。

所以在你的第一个版本中发生了什么,你正在创建小部件,但由于任何地方都没有引用(与你的第二个代码截断相反),它会在行之后立即被销毁/ p>

loadUi('my-ui/mainwindow.ui').show()

完成了。

在文件PyQt documenation中还有一个(相当)简短的说明。 当然,对于一般的python垃圾收集,当然有很多,例如this question