Отправка пользовательского pyqtsignal из одного главного окна в другое - PullRequest
1 голос
/ 11 декабря 2019

начинающий Python-кодер здесь. Я создал два основных окна в QT Designer. В первом окне у меня есть выпадающий список (cb) с тремя элементами и кнопкой (Button1), а в другом окне - LineEdit (правка). Когда я нажимаю кнопку в первом окне, я хочу отобразить текст (текущего элемента, выбранного в поле со списком) в LineEdit, который я создал во втором главном окне.

Я следил за несколькими примерами онлайнно я не могу найти то, что работает для меня. Все примеры выполняются путем построения окон в коде (в отличие от Qt Designer). Люди, которые проектируют свои окна в Qt designer, похоже, сталкиваются с той же проблемой, что и я.

Я был бы очень признателен, если бы кто-нибудь показал мне, как отправить сигнал с окнами, разработанными в Qt designer. Это действительно решило бы большую проблему, которую я получил в настоящее время, и я могу реализовать ту же стратегию в других областях моего кода.

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi


class First_Window(QMainWindow):

    got_signal = pyqtSignal(str)

    def __init__(self):
        super(First_Window,self).__init__()
        loadUi('first_window.ui',self)
        self.setWindowTitle('First Window')
        self.Button1.clicked.connect(self.On_buttonclick_clicked)

    def On_buttonclick_clicked(self):
        self.got_signal.emit(self.cb.currentText())

class Second_Window(QMainWindow):

    def __init__(self):
        super(Second_Window, self).__init__()
        loadUi('second_window.ui', self)
        self.setWindowTitle('Second Window')
        self.dcc = First_Window()
        self.dcc.got_signal.connect(self.show_it)

    def show_it(self, the_signal):
        self.edit.setText(the_signal)
        print(the_signal)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    fw = First_Window()
    fw.show()
    sw = Second_Window()
    sw.show()

    sys.exit(app.exec_())

Этот код является упрощенной версией кода, над которым я работаю, но ониподелиться той же проблемой.

1 Ответ

0 голосов
/ 11 декабря 2019

Объяснение:

Основная проблема в том, что вы создали 2 First_Window:

  • Один, который вы используете, чтобы показать, и
  • Другой, где вы делаетесоединение между got_signal и show_it.

Решение:

Просто создайте First_Window, которое отображается, и установите соединение:

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi


class First_Window(QMainWindow):

    got_signal = pyqtSignal(str)

    def __init__(self):
        super(First_Window, self).__init__()
        loadUi("first_window.ui", self)
        self.setWindowTitle("First Window")
        self.Button1.clicked.connect(self.On_buttonclick_clicked)

    def On_buttonclick_clicked(self):
        self.got_signal.emit(self.cb.currentText())


class Second_Window(QMainWindow):
    def __init__(self):
        super(Second_Window, self).__init__()
        loadUi("second_window.ui", self)
        self.setWindowTitle("Second Window")

    def show_it(self, the_signal):
        self.edit.setText(the_signal)
        print(the_signal)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    fw = First_Window()
    fw.show()
    sw = Second_Window()
    sw.show()

    fw.got_signal.connect(sw.show_it)

    sys.exit(app.exec_())
...