Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как в PyQt назначить кнопке запуск другого приложения *.py? [RSS Feed]

#1 Сен. 23, 2016 15:16:46

shterdek
Зарегистрирован: 2016-09-23
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в PyQt назначить кнопке запуск другого приложения *.py?

Всем доброго времени суток! При изучении питона у меня возникла следующая проблема.
Есть совсем небольшая программа, использующая 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_())
При этом я именно неправильно назначаю, так как если удалить соответствующую строчку, программа работает, просто после нажатия на кнопку ничего не происходит. Конечно, практического смысла эта программа не имеет, но я только начал изучать этот язык, и разобраться сейчас с данной проблемой для меня очень важно. Заранее благодарен за любые советы!

Офлайн

#2 Сен. 23, 2016 15:49:22

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Как в PyQt назначить кнопке запуск другого приложения *.py?

 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)

Офлайн

#3 Сен. 23, 2016 16:58:53

latino2003
Зарегистрирован: 2015-05-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в PyQt назначить кнопке запуск другого приложения *.py?

Если это протокол, то можно открыть ассоциированное приложение:
import webbrowser
webbrowser.open('tel:911') откроется, например, skype, если он указан в качестве дефолтного
webbrowser.open('mailto:info@kremlin.ru') откроется, например, outlook


https://docs.python.org/3.6/library/webbrowser.html

Офлайн

#4 Окт. 2, 2016 22:01:42

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

Как в PyQt назначить кнопке запуск другого приложения *.py?

Если тетрис написан тоже на 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, то кнопка запускает чистое окно.



Офлайн

  • Начало
  • » GUI
  • » Как в PyQt назначить кнопке запуск другого приложения *.py?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version