PyQt5 弹出 Window
PyQt5 Popup Window
我正在尝试使用 PyQt5 构建一个应用程序,当双击 QListWidget
中的项目时,它具有辅助 window "popup"。
代码如下:
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_())
我想在双击列表框中的其中一个名称时弹出第二个 window,但我终究无法在屏幕上绘制 examplePopup
小部件.在此先感谢您的帮助。
我真的不知道为什么它不能与 QWidget
一起工作,因为如果第二个小部件在 __main__
中初始化它确实可以工作。但是,您可以使用 QDialog
来获得相同的结果:
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget, QListWidget, QListWidgetItem, QLabel, QApplication, QDialog
class ExampleWidget(QWidget):
def __init__(self):
super().__init__()
listWidget = QListWidget(self)
listWidget.itemDoubleClicked.connect(self.buildExamplePopup)
for n in ["Jack", "Chris", "Joey", "Kim", "Duncan"]:
QListWidgetItem(n, listWidget)
self.setGeometry(100, 100, 100, 100)
self.show()
@pyqtSlot(QListWidgetItem)
def buildExamplePopup(self, item):
exPopup = ExamplePopup(item.text(), self)
exPopup.setGeometry(100, 200, 100, 100)
exPopup.show()
class ExamplePopup(QDialog):
def __init__(self, name, parent=None):
super().__init__(parent)
self.name = name
self.label = QLabel(self.name, self)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = ExampleWidget()
sys.exit(app.exec_())
我还稍微更改了您的代码,将 @pyqtSlot
装饰器添加到 itemDoubleClicked
信号槽处理程序(您不应将槽声明为静态的)。
弹出窗口 window 未显示,因为您没有保留对它的引用,因此它会在 buildExamplePopup
returns.[=12 后立即被垃圾回收=]
您可以像这样轻松解决问题:
def buildExamplePopup(self, item):
name = item.text()
self.exPopup = examplePopup(name)
self.exPopup.setGeometry(100, 200, 100, 100)
self.exPopup.show()
我正在尝试使用 PyQt5 构建一个应用程序,当双击 QListWidget
中的项目时,它具有辅助 window "popup"。
代码如下:
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_())
我想在双击列表框中的其中一个名称时弹出第二个 window,但我终究无法在屏幕上绘制 examplePopup
小部件.在此先感谢您的帮助。
我真的不知道为什么它不能与 QWidget
一起工作,因为如果第二个小部件在 __main__
中初始化它确实可以工作。但是,您可以使用 QDialog
来获得相同的结果:
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget, QListWidget, QListWidgetItem, QLabel, QApplication, QDialog
class ExampleWidget(QWidget):
def __init__(self):
super().__init__()
listWidget = QListWidget(self)
listWidget.itemDoubleClicked.connect(self.buildExamplePopup)
for n in ["Jack", "Chris", "Joey", "Kim", "Duncan"]:
QListWidgetItem(n, listWidget)
self.setGeometry(100, 100, 100, 100)
self.show()
@pyqtSlot(QListWidgetItem)
def buildExamplePopup(self, item):
exPopup = ExamplePopup(item.text(), self)
exPopup.setGeometry(100, 200, 100, 100)
exPopup.show()
class ExamplePopup(QDialog):
def __init__(self, name, parent=None):
super().__init__(parent)
self.name = name
self.label = QLabel(self.name, self)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = ExampleWidget()
sys.exit(app.exec_())
我还稍微更改了您的代码,将 @pyqtSlot
装饰器添加到 itemDoubleClicked
信号槽处理程序(您不应将槽声明为静态的)。
弹出窗口 window 未显示,因为您没有保留对它的引用,因此它会在 buildExamplePopup
returns.[=12 后立即被垃圾回收=]
您可以像这样轻松解决问题:
def buildExamplePopup(self, item):
name = item.text()
self.exPopup = examplePopup(name)
self.exPopup.setGeometry(100, 200, 100, 100)
self.exPopup.show()