【发布时间】:2021-01-07 10:22:27
【问题描述】:
当我的按钮被点击时,我只是想运行一个类函数。当您像这样(在课堂之外)编写它时它可以工作:
from PySide2 import QtWidgets
window = QtWidgets.QWidget()
def click_me(self):
print('clicked me!')
button1 = QtWidgets.QPushButton("Click me")
button1.clicked.connect(click_me)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(button1)
window.setLayout(layout)
window.show()
但由于某种原因,在类中时同样的事情不起作用:
from PySide2 import QtWidgets
window = QtWidgets.QWidget()
class Tester():
def click_me(self):
print('clicked me!')
def run(self):
button1 = QtWidgets.QPushButton("Click me")
button1.clicked.connect(self.click_me)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(button1)
window.setLayout(layout)
window.show()
Tester().run()
有人可以帮我理解为什么会出现这种情况以及如何解决它。我需要类方法,所以我不能像我的第一个示例那样摆脱类。
注意:我在 Autodesk Maya 中运行它,所以在我的情况下,我不需要在我的代码中启动 QApplication。我通过简单地将上面的代码粘贴到 Maya 终端并运行它来执行上面的代码。
【问题讨论】:
-
在这两种情况下,您似乎都缺少 QApplication 的创建(和执行)。请确保您的示例是可重现的。
-
我在 Maya 中使用它,我不需要添加这样的东西。我不确定你指的是什么?如果你想添加它,你可以编辑我的问题。
-
好的,下次考虑指定它,因为它不是暗示的:对于独立的 (Py)Qt 程序,QApplication 是强制性的,这会使您的代码无法工作; Maya 已经创建了一个 QApplication 实例,所以它不是必需的(但我们必须知道这一点)。也就是说,您的第一个代码是否完整?事实是,即使假设上述情况,您的第一个 sn-p 也不会工作:它将运行,窗口将被显示,然后立即关闭并删除,因为没有保持它活着的参考。
-
好的,感谢您提供的信息,我会将其添加到我的问题中。是的,它确实 100% 有效,我现在也对其进行了测试以确保。它会创建一个包含按钮的窗口,您可以单击该按钮并在控制台中查看打印语句。
-
据我所知,应该加载的所有内容都必须以某种方式添加到
userSetup.py,对吗?您是如何添加上述脚本的?