Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/120: Рейтинг темы: голосов - 120, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 46

Взаимодействие между окнами в PyQt5

31.01.2018, 12:03. Показов 24048. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Столкнулся со сложность в передаче данных от LineEdit и checkBox в другое окно (из одного класса в другой). . Т.е пользователь вводит данные и мне нужно их скажем отобразить в новом окне. Не подскажите как передавать значение их одного окна в другое.

В коде это класс Window2 - где я пытаюсь получить значения из другого класса h= MyWin1()
print(h.Dfrom(), h.changeBBpl()) - но я получаю пустые значения, хотя в окошке я их проставлю.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class MyWin1(QtWidgets.QMainWindow):
 
    def __init__(self, parent=None):
 
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        # запуск второго окна.
        self.ui.pushButton_apply.clicked.connect(self.buts)
 
        self.Rating = set()
        #действие с постановкой галочки в checkBox
        self.ui.checkBox_BBpl.stateChanged.connect(self.changeBBpl)
    
    #Если стоит галочка то возвращает значения
    def changeBBpl(self, state):
 
        if state == Qt.Checked:
            k = '10,11'
            rat = set()
            rat.append(k)
            return(rat)
        else:
            k = '10,11'
            rat = set()
            rat.remove(k)
            return(rat)
 
   # возвращает введенное число
   def Dfrom(self):
 
        if not self.ui.lineEdit_Dfrom.text():
            return 0
        else:
            Dfom = int(self.ui.lineEdit_Dfrom.text())
            return Dfom
 
    def buts(self):
      
            self.ex3 = Window2()
            self.ex3.initUI()
 
class Window2(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
    def initUI():
 
        self.setGeometry(800, 100, 800, 700)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))
 
        self.main_w = QWidget(self)
        l = QVBoxLayout(self.main_w)
        
        # Это отрисовка графика в окне
        m = PlotCanvas(self)
        l.addWidget(m)
        self.main_w.setFocus()
        self.setCentralWidget(self.main_w)
        m.plot(tab, mix, max, miy, may)
        
        #Хочу получить значение из MyWin1!!
        h= MyWin1()
        print(h.Dfrom(), h.changeBBpl())
 
        m.plot(tab, mix, max, miy, may)
        
        m.move(0, 0)
        self.show()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2018, 12:03
Ответы с готовыми решениями:

Передача переменных между окнами в PyQt5
Доброго времени суток, начал изучать python и столкнулся с проблемой что не могу передать переменную из одного окна в другое. Создаю в...

Взаимодействие между окнами
В WinForms передавал нужные данные в качестве параметров при создании формы. Как грамотно делать это в WPF? Почитал Взаимодействие...

Взаимодействие между окнами
Добрый день, уважаемые коллеги :senor: Что-то туплю, подскажите, пожалуйста, где запутался? Допустим у нас есть два окна Swing,...

14
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
31.01.2018, 12:46
Цитата Сообщение от evgen_i Посмотреть сообщение
def initUI():
self.show()
Не надо так делать.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 46
31.01.2018, 13:19  [ТС]
Почему не надо, как же у меня тогда окно отобразиться?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
31.01.2018, 13:47
Процедура называется initUI, то есть там гуй только инициализируется.

Почему окно показывает само себя? Логично было бы, чтобы его показал тот, кто его создал и держит (т. е. имеет на него ссылку), не так ли?

Добавлено через 3 минуты
Цитата Сообщение от evgen_i Посмотреть сообщение
class Window2(QMainWindow):
...
h= MyWin1()
А вот так ещё больше не надо делать.
Во-первых, делается совсем не то, что вы ожидаете. Создаётся НОВЫЙ экземпляр MyWin1, без ваших значений.

Во-вторых, даже если вы каким-то образом передадите туда свой Win1 именно как тип MyWin1 - получается, win1 будет знать про win2, а win2 - про win1. Это плохо. Надо, чтобы знание о другом окне было одностороннее.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 46
31.01.2018, 14:05  [ТС]
А не могли бы продемонстрировать на коде?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
31.01.2018, 14:16
Лень.
Подсказка: функции принимают параметры. Даже конструкторы.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 46
31.01.2018, 14:41  [ТС]
Жаль, спасибо.
0
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
19.02.2018, 03:20
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
#!/usr/bin/python3
# -*- coding:utf-8 -*-
 
import sys
import UI_MainForm
import ReportForm
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
 
 
class MainForm(QWidget, UI_MainForm.Ui_MainForm):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self)
 
        self.pushButton_quit.clicked.connect(qApp.quit)
        self.pushButton_report.clicked.connect(self.report)
 
 
 
    def report(self):
        self.open_report = ReportForm.Report(self.lineEdit_user.text(), self.lineEdit_passwd.text())    #передаём в конструктор значения lineEdit_user и lineEdit_passwd
        self.open_report.show()
 
if __name__ == '__main__':
    main_form_app = QApplication(sys.argv)
    Main_window = MainForm()
    Main_window.show()
    sys.exit(main_form_app.exec_())
В новой форме "принимаем" значения:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
import UI_ReportForm
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
 
 
class Report(QWidget, UI_ReportForm.Ui_Form):
    def __init__(self, user, password):# ВОТ ОНИ РОДИМЫЕ!!!)))
        QWidget.__init__(self)
        self.setupUi(self)
 
        self.pushButton_exit.clicked.connect(self.close)
 
if __name__ == '__main__':
    report_app = QApplication(sys.argv)
    report_window = Report()
    report_window.show()
    sys.exit(report_app.exec_())
Если не разберёшься, кину тебе минимальный пример.
0
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
19.02.2018, 03:22
Небольшой примерчик:
Вложения
Тип файла: zip Example_two_forms.zip (8.7 Кб, 256 просмотров)
1
0 / 0 / 0
Регистрация: 10.08.2019
Сообщений: 3
11.08.2019, 00:31
Как отправить не 2 значения а допустим 5?
Не получается у меня чет никак етим способом.
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
11.08.2019, 01:10
Цитата Сообщение от CybbeR Посмотреть сообщение
Как отправить не 2 значения а допустим 5?
Добавить вот сюда

Python
1
def __init__(self, user, password):# ВОТ ОНИ РОДИМЫЕ!!!)))
лучше, конечно, список передать
0
0 / 0 / 0
Регистрация: 10.08.2019
Сообщений: 3
11.08.2019, 11:23
Подскажите еще. Есть Такие же два окна. В первом жму кнопку открывается второе. Во втором ввожу значения, допустим 5 штук, как их передать в первое окно? Кожда пробую етим примером у меня ошибка вылетает при запуске первого окна что значения не найдены.
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
11.08.2019, 15:52
Надо во втором окне сделать поля, в них сохранить значения переменных и в первом окне их получить
0
0 / 0 / 0
Регистрация: 10.08.2019
Сообщений: 3
11.08.2019, 15:56
есть все кроме того как правильно отправить и принять ети значения. Можно пример кода. У меня ошибка при получении.
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
11.08.2019, 17:43
Лень писать, вот на с++, как может выглядеть, нужно наследовать второе окно от QDialog

C++
1
2
3
4
5
6
7
8
9
10
void MainWindow::startNewGame()
{
    ConfigurationDialog dialog(this);
    if(dialog.exec() == QDialog::Rejected) {
        return; // do nothing if dialog rejected
    }
    ui->player1Name->setText(dialog.player1Name());
    ui->player2Name->setText(dialog.player2Name());
    ui->gameBoard->initNewGame();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2019, 17:43
Помогаю со студенческими работами здесь

Взаимодействие между окнами
Здравстуйте, у меня возник воопрос как можно сделать такое взаемодействие между окнами. У меня есть окно где можно менять цвет заднего...

Взаимодействие между открытыми окнами
На сайте пользователь может открывать списки с данными и редакторы данных. Открытие может происходить либо через submit формы, либо...

Взаимодействие с двумя окнами
Добрый день! Изучаю WPF и столкнулся с небольшой проблемкой при решении задачи. Суть в чём: есть основное окно и несколько дочерних. На...

Взаимодействие с чужими окнами
Добрый день/ночь уважаемы программисты! Пытаюсь по взаимодействовать с открытой папкой но не как не получается. Вот код. procedure...

Взаимодействие з чужими окнами
Здравствуйте, у меня небольшой вопрос, мне нужно чтоб програма взаимодействовала с чужими окнами, например копировала текст окна, изменяла...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru