python - QT 消失第二个窗口

标签 python qt

我是 QT 新手,并且使用 QT 5 在 python 中进行编程。我有一个主窗口,但是当我尝试单击第二个窗口的按钮时,它会显示但很快就会消失。有谁知道我该如何解决这个问题?

def SecondWindow():
    qw = QWidget()
    qw.resize(800, 800)
    qw.move(300, 300)
    qw.show()

最佳答案

Python 与 C++ 不同:在后者中,即使您会泄漏小部件,代码也会按需要工作。从技术上讲,我们不会泄漏该小部件,因为它可以从 QApplication::topLevelWidgets 访问。

在Python中,SecondWindow完成后没有对qw的引用:它是一个局部变量。因此,该小部件会立即被销毁,因为 Python 首先使用引用计数来进行对象生命周期管理,而垃圾收集器仅用于收集形成循环的对象,但这里的情况并非如此。

解决方案是保留对您创建的小部件的引用:

class MyClass(QObject):
  @pyqtSlot()
  def second_windowClick(self):
     self.SecondWindow()

  def SecondWindow(self):
     qw = QWidget()
     qw.resize(800, 800)
     qw.move(300, 300)
     qw.show()
     self.qw = qw

关于python - QT 消失第二个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657046/

相关文章:

C++ - 继承时的段错误

python - 用于 Python 应用程序的 Bluemix 日志记录

python - 您可以将一个 for 循环嵌套在另一个 for 循环中,并且它们具有相同的循环变量吗?

python - 使用 scipy 发行版运行 RandomizedSearchCV 时出现 "OverflowError: Python int too large to convert to C long"

c++ - 如何确定哪个兄弟收到事件?

c++ - 是什么导致了这个 QT 4.7.3 错误?

python - 为什么我的 QtWidgets 之一没有出现?

c++ - QSettings:是否可以禁用组?

python - 任务扇出 - 如何将任务批量添加到队列 - 超过 5

python - 使用字典中的值在多列上过滤 pandas 数据框以进行部分字符串匹配