Нужно чтобы при нажатии кнопки открывался .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()
