Найти - Пользователи
Полная версия: Как в PyQt назначить кнопке запуск другого приложения *.py?
Начало » GUI » Как в PyQt назначить кнопке запуск другого приложения *.py?
1
shterdek
Всем доброго времени суток! При изучении питона у меня возникла следующая проблема.
Есть совсем небольшая программа, использующая 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_())
При этом я именно неправильно назначаю, так как если удалить соответствующую строчку, программа работает, просто после нажатия на кнопку ничего не происходит. Конечно, практического смысла эта программа не имеет, но я только начал изучать этот язык, и разобраться сейчас с данной проблемой для меня очень важно. Заранее благодарен за любые советы!
Rodegast
 class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        .....
       
        self.qbtn2 = QPushButton('tetris', self)
        self.qbtn.clicked.connect(self.tetris)
        ......
    def tetris(self):
         subprocess ....
latino2003
Если это протокол, то можно открыть ассоциированное приложение:
import webbrowser
webbrowser.open('tel:911') откроется, например, skype, если он указан в качестве дефолтного
webbrowser.open('mailto:info@kremlin.ru') откроется, например, outlook


https://docs.python.org/3.6/library/webbrowser.html
leonid_10
Если тетрис написан тоже на 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')
Пример работает, проверил. Если второй код назвать qtetris.py, то кнопка запускает чистое окно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB