Форум сайта python.su
Всем доброго времени суток! При изучении питона у меня возникла следующая проблема.
Есть совсем небольшая программа, использующая PyQt, в ней всего две кнопки - “выход” и “тетрис”. Кнопка выход работает нормально, а вот на нажатие “Тетрис” я хочу назначить запуск другого приложения - qtetris.py, лежащего в той же папке, но никак не могу этого сделать, при попытке назначить ей что-либо - появляется ошибка атрибутов.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys, qtetris from PyQt5.QtWidgets import QWidget, QPushButton, QApplication from PyQt5.QtCore import QCoreApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): qbtn = QPushButton('Exit', self) qbtn.clicked.connect(QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHint()) qbtn.move(350, 270) qbtn2 = QPushButton('tetris', self) qbtn.clicked.connect(QCoreApplication.instance().qtetris.start) qbtn2.resize(qbtn.sizeHint()) qbtn2.move(250, 270) self.setGeometry(20, 20, 480, 320) self.setWindowTitle('Obolochka') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Офлайн
class Example(QMainWindow): def __init__(self): super().__init__() ..... self.qbtn2 = QPushButton('tetris', self) self.qbtn.clicked.connect(self.tetris) ...... def tetris(self): subprocess ....
Отредактировано Rodegast (Сен. 23, 2016 15:50:09)
Онлайн
Если это протокол, то можно открыть ассоциированное приложение:
import webbrowser
webbrowser.open('tel:911') откроется, например, skype, если он указан в качестве дефолтного
webbrowser.open('mailto:info@kremlin.ru') откроется, например, outlook
https://docs.python.org/3.6/library/webbrowser.html
Офлайн
Если тетрис написан тоже на Qt5, то можно сделать так:
в своём файле пишем так:
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication from PyQt5.QtCore import QCoreApplication from qtetris import QTetris class Example(QWidget): def __init__(self): super().__init__() self.initUI() self.qtetris = QTetris(primary_win = self) def initUI(self): qbtn = QPushButton('Exit', self) qbtn.clicked.connect(QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHint()) qbtn.move(350, 270) self.qbtn2 = QPushButton('tetris', self) self.qbtn2.clicked.connect(self.showQTetris) self.qbtn2.resize(qbtn.sizeHint()) self.qbtn2.move(250, 270) self.setGeometry(20, 20, 480, 320) self.setWindowTitle('Obolochka') self.show() def showQTetris(self): if not self.qtetris: self.qtetris = QTetris(primary_win = self) self.qtetris.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QWidget class QTetris(QWidget): def __init__(self, primary_win): super().__init__() self.initUI() self.primary_win = primary_win def initUI(self): self.setGeometry(250, 250, 480, 320) self.setWindowTitle('Tetris')
Офлайн