Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 11, 2017 21:03:06

zxcvbnm
Зарегистрирован: 2017-02-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Открытие форм приложение

как зделать чтобы из одной формы откривалась вторая и при етом первая не закрывалась(PyQt5)
Нужно чтобы из этой формы при нажатие на кнопки begin test соотвествено открывалися формы begin test
а оно у меня отрывает на секунду форму и форма пропадает
Вот код главной формы

 from PyQt5 import  QtCore,QtGui,QtWidgets,uic
import sys
import test
import begin
class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = uic.loadUi("home.ui")
        ........................................................
...............................................................
        self.ui.test.clicked.connect(self.test)
        self.ui.begin.clicked.connect(self.begin)
        self.ui.show()
    def test(self):
        app = QtWidgets.QApplication(sys.argv)
        a = test.Test()
        a.show()
        sys.exit(app.exec_())
    def begin(self):
        ap = QtWidgets.QApplication(sys.argv)
        a = begin.Begin()
        a.show()
        sys.exit(ap.exec_())
if __name__ == '__main__':
    app1 = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app1.exec())

Форма begin
 from PyQt5 import  QtCore,QtGui,QtWidgets,uic
import sys
import datetime
class Begin(QtWidgets.QMainWindow):
    def __init__(self):
        super(Begin, self).__init__()
        self.ui = uic.loadUi("begin.ui")
        self.ui.lb.setVisible(0)
        ............................................................
        self.ui.open2.clicked.connect(self.open_file2)
        self.ui.next2.clicked.connect(self.next2)
        self.ui.next3.clicked.connect(self.next3)
        self.ui.next4.clicked.connect(self.next4)
        self.ui.show()
..............................................................
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Begin()
    sys.exit(app.exec())

Форма test
 from PyQt5 import  QtCore,QtGui,QtWidgets,uic
import sys
class Test(QtWidgets.QMainWindow):
    def __init__(self):
        super(Test, self).__init__()
        self.ui = uic.loadUi("test.ui")
        self.ui.next.clicked.connect(self.next)
        ..................................................................
        self.ui.next2.setIcon(QtGui.QIcon("edit.ico"))
        self.ui.next3.setIcon(QtGui.QIcon("begin.ico"))
        self.ui.next4.setIcon(QtGui.QIcon("stat.ico"))
        self.ui.show()
...................................................................
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Test()
    sys.exit(app.exec())

Отредактировано zxcvbnm (Апрель 11, 2017 21:04:32)

Офлайн

#2 Апрель 12, 2017 12:28:06

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Открытие форм приложение

вот этого

 ap = QtWidgets.QApplication(sys.argv)
sys.exit(app.exec_()) 
не должно быть в def test и def begin



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 12, 2017 12:31:36)

Офлайн

#3 Апрель 12, 2017 15:07:51

zxcvbnm
Зарегистрирован: 2017-02-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Открытие форм приложение

  def test(self):
        a = test.Test()
        a.show()
  def begin(self):
       b = begin.Begin()
       b.show()

но всерано не работает отрываеться почемуто две формы и зразу продают

Офлайн

#4 Апрель 12, 2017 16:51:53

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Открытие форм приложение

почему сразу две, это надо смотреть вессь код.
А закрываеться потому что любой обьект хранится в памяти пока на него ссылается хотябы одна переменная. Какая переменная сылаеться на ваши экземпляры Test и Begin? а и b? так они действуют только внутри процедур test и begin. Процедуры свое отработали, переменных больше нет, сборщик мусора освобождает память занимаемую вашими окнами, окна исчезают. Както так.
Чтобы окна не исчезали нужно гдето хранить на них ссылку.
Например так: self.a = test.Test()
или так: test.Test(self) при этом нужно именить __init__ класса Test на

 def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
Или еще какимнить образом.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#5 Апрель 12, 2017 17:46:45

zxcvbnm
Зарегистрирован: 2017-02-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Открытие форм приложение

Все уже нормально отрываеться но когда окно test закрыть то появляеться исключение в def closeEvent
Вот код формы test

 from PyQt5 import  QtCore,QtGui,QtWidgets,uic
import sys
class Test(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        Form, Base = uic.loadUiType('test.ui')
        self.ui = Form()
        self.ui.setupUi(self)
       ...........................................................
        self.show()
..............................................................
 def closeEvent(self,e):
        rezult = QtWidgets.QMessageBox.warning(Test, "Exit", "Do you exit",
                                     buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                     defaultButton=QtWidgets.QMessageBox.No)
        if rezult == QtWidgets.QMessageBox.Yes:
            e.accept()
        else:
            e.ignore()
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    Test = Test()
    sys.exit(app.exec())

основное окно програмы
 from PyQt5 import  QtCore,QtGui,QtWidgets,uic
import sys
import test
import begin
class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = uic.loadUi("home.ui")
        pal = self.ui.palette()
        pal.setBrush(QtGui.QPalette.Normal,QtGui.QPalette.Window,
                     QtGui.QBrush(QtGui.QPixmap("form_home.jpg")))
        self.ui.setPalette(pal)
        self.ui.test.setIcon(QtGui.QIcon("test.ico"))
        self.ui.begin.setIcon(QtGui.QIcon("begin.ico"))
        self.ui.stat.setIcon(QtGui.QIcon("stat.ico"))
        self.ui.setWindowIcon(QtGui.QIcon('home.ico'))
        self.ui.test.clicked.connect(self.test)
        self.ui.begin.clicked.connect(self.begin)
        self.ui.show()
    def test(self):
        self.a = test.Test()
        self.a.show()
 
if __name__ == '__main__':
    app1 = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app1.exec())

Прикреплённый файлы:
attachment 145.JPG (22,9 KБ)

Офлайн

#6 Апрель 12, 2017 18:21:21

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Открытие форм приложение

zxcvbnm
когда окно test закрыть то появляеться исключение в def closeEvent
что конкретно пишет? потому как у меня никаких исключений не вызывает.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#7 Апрель 12, 2017 18:30:31

zxcvbnm
Зарегистрирован: 2017-02-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Открытие форм приложение

вот

Прикреплённый файлы:
attachment 145.JPG (74,7 KБ)

Офлайн

#8 Апрель 12, 2017 20:19:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Открытие форм приложение

попробуйте заменить Test на self, по моему класс не может выступать родителем.

 rezult = QtWidgets.QMessageBox.warning(self, "Exit", "Do you exit",
                                     buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                     defaultButton=QtWidgets.QMessageBox.No)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 12, 2017 20:22:02)

Офлайн

#9 Апрель 14, 2017 06:32:42

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Открытие форм приложение

PEHDOM
День добрый, опять экстрасенсом работаем?

Недавно для себя подобный пример делал (уж больно много про это спрашивают), выкладываю свой пример.

     def __init__(self, *args, **kwargs):
 def closeEvent(self,e):
Как-то строки с методами “пляшут”.
Не нравится мне, еще что оба окна у zxcvbnm наследуются от QMainWindow.

Прикреплённый файлы:
attachment n-form.zip (7,5 KБ)

Офлайн

#10 Апрель 14, 2017 08:37:55

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Открытие форм приложение

Немного доделанный мой пример (добавлен диалог на подтверждение выхода и добавлена проверка запрещающая пересоздание объекта второго окна).

Прикреплённый файлы:
attachment n-form.zip (7,7 KБ)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version