Error QWidget: Must construct a QApplication before a QWidget

Помогите пожалуйста исправить ошибку:

Error QWidget: Must construct a QApplication before a QWidget

from PyQt5 import QtCore, QtGui, QtWidgets
import os
import sys
from ui import Ui_Form

app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()


class Ui_Form(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.colorburron)



def colorburron (self):
    with open('ip.txt') as f:
        for index, line in enumerate(f):
            if index == 1:
                ip1 = line
                break
    for ips in ip1:
        response = os.system('ping -n 5 ' + ip1)
        if response == 0:
            self.pushButton.setStyleSheet(
                'QPushButton {Background-color: green}')
        else:
            self.pushButton.setStyleSheet(
                'QPushButton {Background-color: red}')



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

Всегда предоставляйте минимально-воспроизводимый пример. Модуль, содержащий форму, созданную в Qt Designer, также надо показывать.

Ваше приложение может выглядеть как показано ниже.

os.system('ping -n 5 ' + ip1) - это тяжелая задача и заморозит интерфейс, но это уже другой вопрос.

import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets

from ui import Ui_Form

''' убрать 5 строк
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
'''

#class Ui_Form(QtWidgets.QMainWindow):
# -----------------------> vvvvvvv            это скрытая ошибка                       !!!
class MainWindow(QtWidgets.QWidget, Ui_Form):
#                                   ^^^^^^^ <-----------------------------------  +++  !!! надо добавить
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.pushButton.clicked.connect(self.colorburron)

    def colorburron (self):
        with open('ip.txt') as f:
            for index, line in enumerate(f):
                if index == 1:
                    ip1 = line
                    break
        for ips in ip1:
            response = os.system('ping -n 5 ' + ip1)                        
            if response == 0:
                self.pushButton.setStyleSheet(
                    'QPushButton {background-color: green}')
            else:
                self.pushButton.setStyleSheet(
                    'QPushButton {background-color: red}')


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ''' убрать 4 строки
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    '''
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
→ Ссылка