@Devil_Evil2021

Как открыть другой исполняемый файл .py по кнопке?

Второй мой вопрос по этой же теме, только в предыдущем был проект на tkinter, а теперь я решил попробовать сделать дизайн через PySide, т.к. быстрее и удобнее наверно, но столкнулся с той же проблемой вызова по кнопке, когда по нажатию кнопки окно должно открывается без проблем, если закрыть окно и снова нажать кнопку, то оно также должно открывается без проблем.
Теперь у меня 4 файла: Author.py и Options.py, и файлы форм AuthorForm.py и OptionsForm.py. Author.py буду использовать как исполняемый файл проекта.
1) Как вызвать файл по кнопке, чтобы открывать/закрывать постоянно, а не 1 раз? Код, который работал для tkinter, в этом случае не работает.
Прикрепляю код: Author.py:
from PyQt5 import QtWidgets
from AuthorForm import Ui_Form
import sys
#import Options
 
class AuthorForm(QtWidgets.QMainWindow):
    def __init__(self):
        super(AuthorForm, self).__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        #кнопка для вызова функции под вопросом 2
        self.ui.auth_btn.clicked.connect(self.Opt_bnt)

    def Opt_btn(self):
        #import Options
        #Options.OptionsForm()
 
 
app = QtWidgets.QApplication([])
application = AuthorForm()
application.show()
 
sys.exit(app.exec())


Код Options.py:
from PyQt5 import QtWidgets
from OptionsForm import Ui_Form
import sys
 
class OptionsForm(QtWidgets.QMainWindow):
    def __init__(self):
        super(OptionsForm, self).__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
 
app = QtWidgets.QApplication([])
application = OptionsForm()
application.show()

sys.exit(app.exec())


2) Как мне вызвать окно Options без ошибок(включая вопрос 1)?
Когда нажимаю кнопку(используя импорт и вызов класса внутри функции Opt_btn), то программа закрывается с ошибкой(если не комментировать последнюю строку в Options.py):
QCoreApplication::exec: The event loop is already running

А если строку убрать, то окно открывается, но снова запустить его не получается.
  • Вопрос задан
  • 1264 просмотра
Решения вопроса 1
yupiter7575
@yupiter7575
Python программист
я решил попробовать сделать дизайн через PySide

Я тут только pyqt вижу.
Да и ответ ваш находится здесь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Потому что у тебя в вызываемом файле делается повторная инициализация приложения.
Весь этот вот код
app = QtWidgets.QApplication([])
application = X() #где X - имя класса формы
application.show()

sys.exit(app.exec())

выполняется как при прямом запуске файла, так и при его импорте.

Есть два решения:
а) убрать код инициализации из вспомогательных файлов, оставить его ТОЛЬКО в главном файле.
б) если позарез нужно, чтобы вспомогательные файлы можно было запускать сами по себе без главного, то заверни этот код в конструкцию вида
if __name__ == '__main__':
    #тут код, который будет выполняться
    #ТОЛЬКО если файл запущен сам по себе
    #и не будет выполняться, если этот файл импортируют
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы