为什么其他窗口(GUI)在Python中运行时未打开?
我有一个场景,其中一个窗口在python Pyqt5中运行。我希望当某些事件发生时,另一个窗口也会打开 我已经编写了一个代码,我认为应该可以正常运行,但当事件发生以打开其他GUI时,我会得到一个错误。 我的代码: 我看到代码是正确的,但我得到一个未知错误:为什么其他窗口(GUI)在Python中运行时未打开?,python,user-interface,pyqt5,Python,User Interface,Pyqt5,我有一个场景,其中一个窗口在python Pyqt5中运行。我希望当某些事件发生时,另一个窗口也会打开 我已经编写了一个代码,我认为应该可以正常运行,但当事件发生以打开其他GUI时,我会得到一个错误。 我的代码: 我看到代码是正确的,但我得到一个未知错误: QCoreApplication::exec:事件循环已在运行 我在谷歌和stack overflow上搜索过,但没有得到任何有价值的东西。任何人都知道为什么会出现此错误以及为什么会出现在我的代码中???每个PyQt5应用程序必须创建一个应用
QCoreApplication::exec:事件循环已在运行
我在谷歌和stack overflow上搜索过,但没有得到任何有价值的东西。任何人都知道为什么会出现此错误以及为什么会出现在我的代码中???每个PyQt5应用程序必须创建一个应用程序对象
app=QApplication(sys.argv)
。从类主窗口
和类弹出窗口
-app=QApplication(sys.argv)
中删除
sys.exit(app.exec\)
-作为应用程序的主循环,他也必须是一个人。从类主窗口
和类弹出窗口
-sys.exit(app.exec())
我稍微提高了你例子的可读性
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class PopUp(QMainWindow):
def __init__(self, x, url, parent=None):
super(PopUp, self).__init__(parent)
self.url = url.text()
self.x = x + 1
self.setWindowTitle("-- PopUp {} --".format(self.x))
self.setGeometry(self.x*100, self.x*100, 300, 200)
win = QWidget()
self.setCentralWidget(win)
nextUrl = QLineEdit(self.url)
self.startButton = QPushButton("Go {}".format(self.x))
fbox = QFormLayout(win)
fbox.addRow(QLabel("URL:"), nextUrl)
fbox.addRow(self.startButton)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.dialogs = []
self.flag = False
win = QWidget()
self.setCentralWidget(win)
self.url = QLineEdit() # + self
wait = QLineEdit()
self.count = QLineEdit() # + self
startButton = QPushButton("Start")
startButton.clicked.connect(self.requests)
fbox = QFormLayout(win)
fbox.addRow(QLabel("URL:"), self.url)
fbox.addRow(QLabel("Wait (sec):"), wait)
fbox.addRow(QLabel("Iteration:"), self.count)
fbox.addRow(startButton)
def requests(self):
if self.dialogs and self.flag:
_ = [ i.hide() for i in self.dialogs]
self.dialogs = []
for x in range(0, int(self.count.text())):
# certain event happens here, which will cause other window to get open
dialog = PopUp(x, self.url, self)
dialog.startButton.clicked.connect(self.requests2)
dialog.show()
self.dialogs.append(dialog)
self.flag = True
def stop(self): # ?
sys.exit()
def requests2(self):
print("def requests2(self): clicked Button {}".format(self.sender().text()))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.setWindowTitle("-- Title --")
main.resize(300,200)
main.show()
sys.exit(app.exec_())
每个PyQt5应用程序必须创建一个应用程序对象
app=QApplication(sys.argv)
。从类主窗口
和类弹出窗口
-app=QApplication(sys.argv)
中删除sys.exit(app.exec_())
-作为应用程序的主循环,他也必须独自一人。从类主窗口
和类弹出窗口
-sys.exit(app.exec_389;())
@S.Nick感谢您的指导。。但是从这两个类中删除这两个东西并不能让正确的GUI打开。结果只打开了一个空白窗口。单击“开始”按钮时应打开多少窗口?将self.dialog
更改为dialog
。您不会在中创建类属性loop@eyllanesc谢谢,修好了。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class PopUp(QMainWindow):
def __init__(self, x, url, parent=None):
super(PopUp, self).__init__(parent)
self.url = url.text()
self.x = x + 1
self.setWindowTitle("-- PopUp {} --".format(self.x))
self.setGeometry(self.x*100, self.x*100, 300, 200)
win = QWidget()
self.setCentralWidget(win)
nextUrl = QLineEdit(self.url)
self.startButton = QPushButton("Go {}".format(self.x))
fbox = QFormLayout(win)
fbox.addRow(QLabel("URL:"), nextUrl)
fbox.addRow(self.startButton)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.dialogs = []
self.flag = False
win = QWidget()
self.setCentralWidget(win)
self.url = QLineEdit() # + self
wait = QLineEdit()
self.count = QLineEdit() # + self
startButton = QPushButton("Start")
startButton.clicked.connect(self.requests)
fbox = QFormLayout(win)
fbox.addRow(QLabel("URL:"), self.url)
fbox.addRow(QLabel("Wait (sec):"), wait)
fbox.addRow(QLabel("Iteration:"), self.count)
fbox.addRow(startButton)
def requests(self):
if self.dialogs and self.flag:
_ = [ i.hide() for i in self.dialogs]
self.dialogs = []
for x in range(0, int(self.count.text())):
# certain event happens here, which will cause other window to get open
dialog = PopUp(x, self.url, self)
dialog.startButton.clicked.connect(self.requests2)
dialog.show()
self.dialogs.append(dialog)
self.flag = True
def stop(self): # ?
sys.exit()
def requests2(self):
print("def requests2(self): clicked Button {}".format(self.sender().text()))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.setWindowTitle("-- Title --")
main.resize(300,200)
main.show()
sys.exit(app.exec_())