Python:有人能猜出在这个任务中发生了什么吗?可能与PyQt有关
我不熟悉这种语言,我正在使用PyQt进行一个项目 对于那些熟悉PyQt的人,我使用Qt设计器创建了.ui文件,然后尝试用python加载它 我发现了一件很“奇怪”的事 基本上,我的UI不适用于以下代码:Python:有人能猜出在这个任务中发生了什么吗?可能与PyQt有关,python,pyqt,Python,Pyqt,我不熟悉这种语言,我正在使用PyQt进行一个项目 对于那些熟悉PyQt的人,我使用Qt设计器创建了.ui文件,然后尝试用python加载它 我发现了一件很“奇怪”的事 基本上,我的UI不适用于以下代码: def main(): app = QW.QApplication(sys.argv) loadUi('my-ui/mainwindow.ui').show() sys.exit(app.exec_()) 没有错误消息,窗口根本不显示 但是,如果我将代码更改为: def ma
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会发生什么
你看,我唯一改变的是添加赋值。赋值期间发生的事情,除了将对象绑定到名称(
w
)之外,是python增加了对象的引用计数。也就是说,从其他任何地方(即另一个对象或变量)引用此对象的次数
引用计数达到零的对象将被删除/“垃圾收集”,因为一般来说,现在程序代码可以与它们进行交互
因此,在第一个变体中发生的情况是,您正在创建小部件,但是由于任何地方都没有引用(与您的第二个代码被截取相反),因此它将在行后立即被销毁
loadUi('my-ui/mainwindow.ui').show()
完成了
文件中也有(相当)简短的说明。
当然,一般来说,python垃圾收集有很多内容,请参见,例如…非常感谢。我以前从未见过这样的垃圾收集。