Как сделать, чтобы при нажатии на кнопку в графическом интерфейсе программа открывала следующую программу и закрывалась

Как можно подружить PyQt5 и os. Мне надо сделать так, чтобы при нажатии на кнопку в графическом интерфейсе программа открывала следующую программу и закрывалась.
Как это сделать, я не понимаю.

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QLabel
from PyQt5.QtCore import QCoreApplication
import os

class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        
        lbl1 = QLabel('Привет! Ты попал на блиц-опрос по темам!', self)
        lbl1.move(15, 10)
        lbl2 = QLabel('Выбери тему:', self)
        lbl2.move(15, 30)
        lbl3 = QLabel('1 - История', self)
        lbl3.move(15, 50)
        lbl4 = QLabel('2 - Космос', self)
        lbl4.move(15, 70)
        lbl5 = QLabel('3 - Математика', self)
        lbl5.move(15, 90)
        lbl6 = QLabel('4 - Литература', self)
        lbl6.move(15, 110)
        lbl7 = QLabel('5 - География', self)
        lbl7.move(15, 130)

        btn1 = QPushButton('1', self)
        btn1.resize(btn1.sizeHint())
        btn1.move(10, 270)

        btn2 = QPushButton('2', self)
        btn2.resize(btn2.sizeHint())
        btn2.move(88, 270)

        btn3 = QPushButton('3', self)
        btn3.resize(btn3.sizeHint())
        btn3.move(165, 270)        

        btn4 = QPushButton('4', self)
        btn4.resize(btn4.sizeHint())
        btn4.move(242, 270)        

        btn5 = QPushButton('5', self)
        btn5.resize(btn5.sizeHint())
        btn5.move(320, 270)
        
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle('Тест')
        self.show()
        
        btn1.clicked.connect(QCoreApplication.instance().quit)
        btn2.clicked.connect(QCoreApplication.instance().quit)
        btn3.clicked.connect(QCoreApplication.instance().quit)
        btn4.clicked.connect(QCoreApplication.instance().quit)
        btn5.clicked.connect(QCoreApplication.instance().quit)
        
if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

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

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

PyQt5 и os никогда не ссорились.
Из опубликованного вами кода, я понял, что вам надо создать блиц-опрос.

Один из возможных вариантов - использовать класс QWizard.

QWizard - это особый тип диалогового окна ввода, состоящего из последовательности страниц. Задача wizard's - шаг за шагом провести пользователя через процесс.

import sys
#import os
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Wizard(QWizard):
    finished = pyqtSignal(list)

    def __init__(self, titles, datas, parent=None):
        super(Wizard, self).__init__(parent)
        self.parent = parent
        self.setStyleSheet(('font:50 12pt "MS Shell Dlg 2";'))

        self.groups = []
        for title, options in zip(titles, datas):
            page, group = Wizard.create_page(title, options)
            self.addPage(page)
            self.groups.append(group)

        self.button(QWizard.FinishButton).clicked.connect(self.on_finished)
        self._results = []

    @property
    def results(self):
        self.get_options()
        return self._results

    def get_options(self):
        self._results = []
        for group in self.groups:
            button = group.checkedButton()
            if button is not None:
                self._results.append(button.text())
            else:
                self._results.append(None)                

    @pyqtSlot()
    def on_finished(self):
        self.parent.show()
        self.finished.emit(self.results)
        self.hide()

    @staticmethod
    def create_page(title, options):
        page = QWizardPage()
        group = QButtonGroup(page)
        page.setTitle(f'<h3>{title}</h3>')
        page.setSubTitle("Пожалуйста, выберите один из этих ответов.")
        layout = QVBoxLayout(page)
        for option in options:
            radiobutton = QRadioButton(text=option)
            group.addButton(radiobutton)
            layout.addWidget(radiobutton)
        return page, group


class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.topics = [
            "История   ", 
            "Космос    ", 
            "Математика", 
            "Литература", 
            "География "
        ]
        
        self.lbl1 = QLabel('Привет! Вы попали на блиц-опрос по темам!', 
            alignment = Qt.AlignCenter)
        self.lbl1.setStyleSheet("font: 17pt \"Ubuntu\";")

        self.selectedTopic = None
        
        self.layout = QGridLayout(self)
        self.layout.addWidget(self.lbl1, 1, 1)
        
        self.buttonGroup = QButtonGroup() 
        for i, topic in enumerate(self.topics):
            rb = QRadioButton(topic)
            rb.setStyleSheet("font: 15pt \"Consolas\";")
            self.buttonGroup.addButton(rb, i)
            self.layout.addWidget(rb, i+2, 1, alignment = Qt.AlignCenter)
        self.buttonGroup.idClicked.connect(self.handleButtons)

        self.lbl2 = QLabel('Пожалуйста, выберите тему и нажмите кнопку `Начать опрос`',
            alignment = Qt.AlignCenter)
        self.lbl2.setStyleSheet("font-size: 12pt;")
        self.layout.addWidget(self.lbl2, i+3, 1)
        
        self.btnStart = QPushButton('Начать опрос')
        self.btnStart.setStyleSheet("font-size: 12pt;")
        self.btnStart.clicked.connect(self.start_survey)
        self.layout.addWidget(self.btnStart, i+4, 1, alignment = Qt.AlignCenter)
        
    def handleButtons(self, index):
        color = f'#{random.randint(0, 0xFFFFFF):06x}'
        for i in range(len(self.topics)):
            if i == index:
                self.buttonGroup.button(index).setStyleSheet(f'''
                    background: {color};
                    font: 15pt \"Consolas\";
                ''')
            else:
                self.buttonGroup.button(i).setStyleSheet(f'''
                    background: #f0f0f0;
                    font: 15pt \"Consolas\";
                ''')
            self.selectedTopic = self.topics[index]

    def start_survey(self):
        if not self.selectedTopic:
            msg = QMessageBox.information(
                self, 
                'Внимание', 
                'Вы не выбрали тему опроса.'
            )
            return
        
        if self.selectedTopic == "История   ":
            print(f'''
                {self.selectedTopic} - вам надо сформировать опросник 
                для этой темы. Смотрите как это сделано в разделе "Математика"
            ''')
            return
        elif self.selectedTopic == "Космос    ": 
            print(f'''
                {self.selectedTopic} - вам надо сформировать опросник 
                для этой темы. Смотрите как это сделано в разделе "Математика"
            ''')
            return
        elif self.selectedTopic == "Математика":
            title = [
                "Цифры, используемые в современной математике?", 
                "Как называется сотая часть числа?", 
                "Какой раздел математики греки называли «искусством чисел»?",
                "Что найдём, если расстояние разделим на скорость?",
            ]
            data = [
                ["Арабские", "Римские", "Обычные", "Русские"], 
                ["Сотня", "Процент", "Доля"], 
                ["Начала анализа", "Геометрия", "Арифметика", "Алгебра"],
                ["Работу", "Длину", "Скорость", "Время"],
                
            ]
            self.result = ["Арабские", "Процент", "Арифметика", "Время"]
            
        elif self.selectedTopic == "Литература":
            print(f'''
                {self.selectedTopic} - вам надо сформировать опросник 
                для этой темы. Смотрите как это сделано в разделе "Математика"
            ''')
            return
        elif self.selectedTopic == "География ": 
            print(f'''
                {self.selectedTopic} - вам надо сформировать опросник 
                для этой темы. Смотрите как это сделано в разделе "Математика"
            ''')
            return
            
        self.wizard = Wizard(title, data, self)
        self.wizard.finished.connect(self.wizard_finished)
        self.wizard.show()
        self.hide()
        
    def wizard_finished(self, results):
        text = ''
        for i, result in enumerate(results):
            if result is None:
                text = f'{text}Вы не ответили на {i+1}-й вопрос;\n'
        if text:
            text = f'{text}\n Попробуйте пройти опрос еще раз.'
            msg = QMessageBox.information(
                self, 
                'Внимание', 
                text
            )
            return 
            
        text = ''
        for i, result in enumerate(results):
            if result != self.result[i]:
                text = f'{text}Вы неправильно ответили на {i+1}-й вопрос. Ответ - {self.result[i]}\n'        
            
        if text:
            text = f'{text}\n Попробуйте пройти опрос еще раз.'
            msg = QMessageBox.information(
                self, 
                'Внимание', 
                text
            )
        else:
            msg = QMessageBox.information(
                self, 
                'Super!', 
                'Вы правильно ответили на все вопросы!'
            )       

    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка