【发布时间】:2019-09-03 10:22:16
【问题描述】:
我有一个场景在 python Pyqt5 中运行一个窗口。我希望当某个事件发生时,另一个窗口也会打开。
我编写了一个我认为应该可以正常运行的代码,但是当发生打开其他 GUI 的事件时,我得到一个错误。 我的代码:
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
app = QApplication(sys.argv)
win = QWidget()
l1 = QLabel("URL:")
url = QLineEdit()
l3 = QLabel("Wait (sec):")
wait = QLineEdit()
l2 = QLabel("Iteration:")
l2.move(20,100)
global add1
count = QLineEdit()
fbox = QFormLayout()
fbox.addRow(l1, url)
fbox.addRow(l3, wait)
vbox = QVBoxLayout()
vbox.addWidget(count)
fbox.addRow(l2, vbox)
startButton=QPushButton("Start")
fbox.addRow(startButton)
startButton.clicked.connect(self.requests)
win.setLayout(fbox)
win.setWindowTitle("--")
win.resize(300,200)
win.show()
sys.exit(app.exec_())
def requests(self):
for x in range(0,int(count.text())):
//certain event happens here, which will cause other window to get open
self.dialog = PopUp(self)
self.dialog.show()
def stop(self):
sys.exit()
class PopUp(QMainWindow):
def __init__(self, parent=None):
super(PopUp, self).__init__(parent)
app = QApplication(sys.argv)
win = QWidget()
l1 = QLabel("URL:")
nextUrl = QLineEdit()
fbox = QFormLayout()
fbox.addRow(l1, url)
startButton = QPushButton("Go")
fbox.addRow(startButton)
startButton.clicked.connect(self.requests)
win.setLayout(fbox)
win.setWindowTitle("--")
win.resize(300, 200)
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
我看到代码是正确的,但我收到一个未知错误:
QCoreApplication::exec: The event loop is already running
我在谷歌和这里的堆栈溢出中搜索过,但没有得到任何有价值的东西。任何人都知道为什么会出现这个错误以及为什么会出现在我的代码中??
【问题讨论】:
-
每个 PyQt5 应用程序必须创建一个应用程序对象
app = QApplication(sys.argv)。从class MainWindow和class PopUp-app = QApplication (sys.argv)中删除。sys.exit(app.exec_())- 应用程序的主循环,他也必须是一个人。从class MainWindow和class PopUp-sys.exit(app.exec_())中删除。 -
@S.Nick 谢谢你的指导。但是从两个类中删除这两个东西并不能打开正确的 GUI。结果中只打开了一个空白窗口。
-
点击“开始”按钮时应该打开多少个窗口?
标签: python user-interface pyqt5