Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
1

Как сделать, чтобы при нажатии кнопки программа переходила к следующему окну или открывала его отдельно?

20.01.2020, 19:28. Показов 5728. Ответов 16
Метки нет (Все метки)

Прошу не судить строго, изучаю пайтон только 2 день. Сразу извиняюсь за такой огромный текст(

Пишу приложение, вкратце, его функционал - возможность посмотреть расписание на каждый день. В меню 3 кнопки: "Постоянное" (постоянное расписание на каждый учебный день), "Изменения" (расписание с изменениями, при нажатии открывается группа в вк, в которую выкладываются изменения в расписании) и "Оценки" (открывает сайт эл. журнала)
С последними двумя проблем нет, все сделал, ссылки открывает. Проблема в кнопке "Постоянное", так как она требует перехода в следующий раздел приложения с выбором дня недели на который нужно посмотреть расписание.

Дело в том, я заранее сделал дизайн для проги на QT Disigner для каждого окошка (начиная от главного меню с 3 кнопками, заканчивая расписанием на каждый день). В главный файл импортировал все остальные. Теперь вопрос, как сделать, чтобы при нажатии на кнопку "Постоянное", у меня происходил переход к меню выбора дня недели. Сейчас, у меня на долю секунды открывается это окно и сразу закрывается.

Код от главного файла:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from PySide import  QtCore, QtGui
import sys
from menu import Ui_Dialog #главное меню
from pnrasp import Ui_pnrasp #расписание на понедельник
import webbrowser
 
 
 
#Запуск интерфейса главного меню
app = QtGui.QApplication(sys.argv)
 
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
 
#Кнопка Изменения
def izmp():
    webbrowser.open("https://vk.com", new=2) #ссылка стерта специально
 
ui.izmbtn.clicked.connect( izmp )
 
#Кнопка Оценки
def ocenp():
    webbrowser.open("https://", new=2) #ссылка стерта специально
 
ui.ocenkibtn.clicked.connect ( ocenp )
 
#Кнопка Постоянное. 
#Проблема тут. При таком исходе у меня на долю секунды открывается окно, которое мне нужно и сразу 
закрывается. Мне вообще нужно, чтобы это открывалось не в отдельном окне, а в том же, главном. Как это сделать?
def postp():                                  
        pnrasp = QtGui.QDialog()
        ui = Ui_pnrasp()
        ui.setupUi(pnrasp)
        pnrasp.show()
 
ui.postbtn.clicked.connect ( postp )
 
 
#run main loop
sys.exit(app.exec_())
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2020, 19:28
Ответы с готовыми решениями:

Как сделать чтобы при нажатии на красный крестик программа не закрывалась а открывала нужную мне форму?
Как сделать чтобы при нажатии на красный крестик программа не закрывалась а открывала нужную мне...

Как сделать, чтобы при нажатии кнопки программа копировала цифры от 1 до 255?
Хочу сделать такую программу прикол, чтобы при нажатии кнопки и записывания в едит1 и едит2...

как как сделать, чтобы при двойном нажатии кнопки(+,-,/,* и т.д) программа не вылетала?
вопрос о калькуляторе как сделать чтобы при двойном нажатии кнопки(+,-,/,* и т.д) программа не...

Как сделать чтобы при нажатии кнопки чтобы активировались все неактивные кнопки?
На форме имеются три кнопки. При открытии формы кнопка "button1" становится неактивна:...

16
Эксперт Python
4531 / 1959 / 351
Регистрация: 17.03.2012
Сообщений: 9,862
Записей в блоге: 5
21.01.2020, 11:20 2
Избавьтесь от глобалок (app можно оставить).
Открыть окно - метод .show(), но вы уверены, что вам нужно именно это?
1
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 90
21.01.2020, 14:36 3
Лучший ответ Сообщение было отмечено Denis Numba как решение

Решение

Как-то так...
Код основного окна:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python3
# -*- coding:utf-8 -*-
 
import sys
import Ui_MainForm
import SecondForm
from PyQt5.QtWidgets import *
 
 
class MainForm(QMainWindow, Ui_MainForm.Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)
 
        self.pushButton_quit.clicked.connect(qApp.quit)
        self.pushButton_newForm.clicked.connect(self.open_second_form)
 
 
    # метод, открывающий новое окно
    def open_second_form(self):
        self.open_form = SecondForm.SecondForm()
        self.open_form.show()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainForm()
    win.show()
    sys.exit(app.exec_())
Код окна, которое откроется при по нажатию кнопки в главном окне:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python3
# -*- coding:utf-8 -*-
 
import sys
import Ui_SecondForm
from PyQt5.QtWidgets import *
 
 
class SecondForm(QWidget, Ui_SecondForm.Ui_Form):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setupUi(self)
 
        self.pushButton_close.clicked.connect(self.close)
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = SecondForm()
    win.show()
    sys.exit(app.exec_())
Смотри комментарий к методу в главном окне!
Прилагаю данный тестовый "проект", чтобы ты сам внимательно разобрался.
1
Вложения
Тип файла: zip Two_Forms.zip (7.1 Кб, 9 просмотров)
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
21.01.2020, 15:32  [ТС] 4
что такое QWidget?
И, он же импортируется из PyQt5, а у меня PySide
или я что-то неправильно понимаю?
0
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 90
21.01.2020, 15:42 5
Поменяй в импортах PyQt5 на PySide.
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
21.01.2020, 16:20  [ТС] 6
Можно ли как-то сделать, чтобы открывалось не отдельное окно, а чтобы расписание открывалось прямо в главном? или чтобы расписание открывалось в отдельном окне, а главное закрывалось, и открывалось заново при выходе из первого?
0
Эксперт Python
4531 / 1959 / 351
Регистрация: 17.03.2012
Сообщений: 9,862
Записей в блоге: 5
21.01.2020, 16:29 7
Denis Numba, посмотри QStackedWidget.
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
21.01.2020, 16:48  [ТС] 8
это только на PyQt можно сделать? У меня PySide, PyQt5 нет.
0
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 90
22.01.2020, 03:40 9
Это работает и с PyQt5 и в PySide.
Почитай про разницу между импортами PyQt5 и PySide и исправь импорты в коде.
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
23.01.2020, 14:11  [ТС] 10
Не работает(
Сделал все как в вашем коде, оба окна по отдельности открываются, но при нажатии кнопки в первом ничего не происходит.

Главное окно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from PySide import QtCore, QtGui
import sys
from first import Ui_MainWindow
from second import Ui_SecondForm
 
class MainForm(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
 
        self.setupUi(self)
        self.pushButton.clicked.connect( self.opens )
 
 
def opens(self):
    self.open_form = Ui_SecondForm.SecondForm()
    self.open_form.show()
 
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
Код от второго:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PySide import QtCore, QtGui
import sys
from sec import Ui_SecondForm
 
 
class SecondForm(QtGui.QWidget, Ui_SecondForm):
  def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)
 
    self.setupUi(self)
    self.pushButton.clicked.connect(self.close)
 
 
 
 
if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   Form = QtGui.QWidget()
   ui = Ui_SecondForm()
   ui.setupUi(Form)
   Form.show()
   sys.exit(app.exec_())
0
120 / 90 / 33
Регистрация: 17.10.2018
Сообщений: 353
23.01.2020, 16:41 11
Цитата Сообщение от Denis Numba Посмотреть сообщение
но при нажатии кнопки в первом ничего не происходит
В первом файле из второго вы должны импортировать класс SecondForm.
Соответственно в функции opens:
Python
1
self.open_form = SecondForm()
1
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 90
23.01.2020, 17:20 12
Ты бы хоть плюсики поставил всем тем, кто тебе помог...
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
23.01.2020, 18:41  [ТС] 13
К сожалению, это тоже ничего не дало
0
120 / 90 / 33
Регистрация: 17.10.2018
Сообщений: 353
23.01.2020, 19:23 14
Цитата Сообщение от Denis Numba Посмотреть сообщение
К сожалению, это тоже ничего не дало
Стесняюсь спросить:
Python
1
2
3
4
5
6
7
8
9
10
11
class MainForm(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
 
        self.setupUi(self)
        self.pushButton.clicked.connect( self.opens )
 
 
def opens(self):
    self.open_form = Ui_SecondForm.SecondForm()
    self.open_form.show()
где вы используете этот класс? Сравните еще раз свой код с кодом, предоставленным вам axe77, я думаю ошибки найдутся при построчном сравнении

Вам дали готовый код, осталось поменять входные параметры классов, а именно Ui - формы. Кстати, с отступами у вас тоже не все в порядке.
1
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 106
23.01.2020, 20:00  [ТС] 15
Да, все, спасибо всем
Особенно axe77, взял ваш код и под себя переделал, заработало.
Не могу понять только, в чем у меня ошибка, но, думаю разберусь! Спасибо
0
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 90
23.01.2020, 20:38 16
Учи ООП в общем и его реализацию в Python в частности и всё станет понятно. Это не так уж сложно.
Купи (качни) книгу по PyQt5 Дронова и Прохорёнка, она, для начала - самое то. Удачи.
0
120 / 90 / 33
Регистрация: 17.10.2018
Сообщений: 353
23.01.2020, 20:41 17
Цитата Сообщение от axe77 Посмотреть сообщение
Учи ООП в общем и его реализацию в Python в частности и всё станет понятно. Это не так уж сложно.
Купи (качни) книгу по PyQt5 Дронова и Прохорёнка, она, для начала - самое то. Удачи.
Присоединюсь к пожеланию и совету, пожалуй))))
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2020, 20:41

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как сделать, чтобы при нажатии по нику или логину пользователя, попасть на его страницу php mysql
Как на странице пользователи сайта организовать такую вещь: Это уже сделано -> Выводим список...

Как сделать, чтобы при нажатии кнопки Push Button загоралась та или иная кнопка Radio Button
вопрос: Как сделать,чтобы при нажатие кнопки Push Botton загоралась та или иная кнопка Radio Button?

Как сделать так, чтобы при нажатии кнопки появлялся текст?Чтобы без javascript
Как сделать так, чтобы при нажатии кнопки появлялся текст? На html или php можно сделать . Типо...

При нажатии левой кнопки мыши по окну сайта или стима открывается окно рекламы
При нажатии в поле сайта или на любую ссылку время от времени открывается окно с рандомной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.