Нужно чтобы при нажатии кнопки открывался .exe файл

Помогите с написанием кода. Я хочу, сделать так, чтобы после нажатия на кнопку у меня открывался .exe файл другой программы.

main.py:

import sys
from PyQt5 import QtWidgets, QtGui, QtCore


class GifImg(QtWidgets.QLabel):
    signal = QtCore.pyqtSignal()

    def __init__(self, file_name, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.move = QtGui.QMovie(file_name)
        self.move.start()
        self.setMovie(self.move)
        self.setScaledContents(True)

    def mousePressEvent(self, event):
        self.signal.emit()


class Main(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        label_gif = GifImg("3nxW.gif")
        label_gif.setFixedSize(500, 600)
        self.text = QtWidgets.QTextEdit()

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(label_gif)

        self.setLayout(layout)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

Вот код программы, которую мне нужно открыть (есть .exe вариант):

import math
import turtle


def xt(t):
    return 16 * math.sin(t)**3

def yt(t):
    return 13 * math.cos(t)-5 * math.cos(2*t)-2*math.cos(3*t)-math.cos(4*t)


t = turtle.Turtle()
t.speed(500)
turtle.colormode(255)
turtle.Screen().bgcolor(0,0,0)
for i in range(2550):
    t.goto((xt(i)*20,yt(i)*20))
    t.pencolor((255-i)%255, i% 255,255)
    t.goto(0,0)

t.hideturtle()
turtle.update()
turtle.mainloop()

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

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

Класс QProcess используется для запуска внешних программ и взаимодействия с ними.

main.py

import sys
from PyQt5 import QtWidgets, QtGui, QtCore


class GifImg(QtWidgets.QLabel):
    signal = QtCore.pyqtSignal()

    def __init__(self, file_name, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.move = QtGui.QMovie(file_name)
        self.move.start()
        self.setMovie(self.move)
        self.setScaledContents(True)

    def mousePressEvent(self, event):
        self.signal.emit()


class Main(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        
        self.label_gif = GifImg("tsvet.gif")                      # <---- установите свое
# ???        self.label_gif.setFixedSize(300, 300)
        self.label_gif.signal.connect(self.label_clicked)
        
        self.text = QtWidgets.QTextEdit('''
Кликните по изображению выше  ^^^  и запустите `q1450410_2.py`
        ''')

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.label_gif)
        layout.addWidget(self.text)
        
        self._process = QtCore.QProcess(self)                           # +++

    def label_clicked(self):
        self._process.start('python', ["q1450410_2.py"])                # <--- так
        
#        self._process.start('C:/Windows/system32/calc.exe')            # <--- или так 


    def closeEvent(self, event):
        self._process.kill()
        super(Main, self).closeEvent(event)
        
    

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setFont(QtGui.QFont("Bahnschrift SemiBold", 12, QtGui.QFont.Bold))
    main = Main()
    main.show()
    sys.exit(app.exec_())

q1450410_2.py

import math
import turtle


def xt(t):
    return 16 * math.sin(t)**3

def yt(t):
    return 13 * math.cos(t)-5 * math.cos(2*t)-2*math.cos(3*t)-math.cos(4*t)


t = turtle.Turtle()
t.speed(500)
turtle.colormode(255)
turtle.Screen().bgcolor(0, 0, 0)
for i in range(2550):
    t.goto((xt(i) * 20, yt(i) * 20))
    t.pencolor((255-i) % 255, i % 255, 255)
    t.goto(0, 0)

t.hideturtle()
turtle.update()
turtle.mainloop()

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

→ Ссылка