PyQt5 弹出窗口

sup*_*310 5 popup python-3.x pyqt5

我正在尝试使用 PyQt5 构建一个应用程序,当QListWidget双击a 中的项目时,该应用程序有一个辅助窗口“弹出” 。

这是代码:

import sys
from PyQt5.QtWidgets import QWidget, QListWidget, QListWidgetItem, QLabel, QPushButton, QApplication


class exampleWidget(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        listWidget = QListWidget(self)
        listWidget.itemDoubleClicked.connect(self.buildExamplePopup)

        names = ["Jack", "Chris", "Joey", "Kim", "Duncan"]

        for n in names:
            QListWidgetItem(n, listWidget)

        self.setGeometry(100, 100, 100, 100)
        self.show()

    @staticmethod
    def buildExamplePopup(item):
        name = item.text()
        exPopup = examplePopup(name)
        exPopup.setGeometry(100, 200, 100, 100)
        exPopup.show()


class examplePopup(QWidget):
    def __init__(self, name):
        super().__init__()

        self.name = name

        self.initUI()

    def initUI(self):
        lblName = QLabel(self.name, self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = exampleWidget()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我希望在双击列表框中的一个名称时弹出第二个窗口,但我一生都无法让examplePopup小部件在屏幕上绘制。在此先感谢您的帮助。

ekh*_*oro 8

弹出窗口不会显示,因为您没有保留对它的引用,因此它会在buildExamplePopup返回后立即被垃圾收集。

您可以像这样轻松解决问题:

    def buildExamplePopup(self, item):
        name = item.text()
        self.exPopup = examplePopup(name)
        self.exPopup.setGeometry(100, 200, 100, 100)
        self.exPopup.show()
Run Code Online (Sandbox Code Playgroud)