Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么其他窗口(GUI)在Python中运行时未打开?_Python_User Interface_Pyqt5 - Fatal编程技术网

为什么其他窗口(GUI)在Python中运行时未打开?

为什么其他窗口(GUI)在Python中运行时未打开?,python,user-interface,pyqt5,Python,User Interface,Pyqt5,我有一个场景,其中一个窗口在python Pyqt5中运行。我希望当某些事件发生时,另一个窗口也会打开 我已经编写了一个代码,我认为应该可以正常运行,但当事件发生以打开其他GUI时,我会得到一个错误。 我的代码: 我看到代码是正确的,但我得到一个未知错误: QCoreApplication::exec:事件循环已在运行 我在谷歌和stack overflow上搜索过,但没有得到任何有价值的东西。任何人都知道为什么会出现此错误以及为什么会出现在我的代码中???每个PyQt5应用程序必须创建一个应用

我有一个场景,其中一个窗口在python Pyqt5中运行。我希望当某些事件发生时,另一个窗口也会打开

我已经编写了一个代码,我认为应该可以正常运行,但当事件发生以打开其他GUI时,我会得到一个错误。 我的代码:

我看到代码是正确的,但我得到一个未知错误:
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_())