Найти - Пользователи
Полная версия: PyQt4 | Как передать сигнал из дочернего окна в родительское?
Начало » GUI » PyQt4 | Как передать сигнал из дочернего окна в родительское?
1 2 3 4 5
Kyrym
У меня, наконец-то, кончилась запарка, и я спешу к данному обсуждению.

Rodegast
> А у топикстартера оно не должно закрываться после нажатия кнопки “Жми”
Должно. Он просто это не сделал.
На самом деле, меня интересует оба варианта. Есть случаи, когда надо передать данные из дочернего окна и не закрывать его.
Rodegast
что надо учится пользоваться дизайнером, а не пытаться “писать руками”
ну-ну…


vic57
Kyrym
На самом деле, меня интересует оба варианта. Есть случаи, когда надо передать данные из дочернего окна и не закрывать его.
имхо усложняешь задачу
делай коннект в приложении
 from PyQt4.Qt import *
def pressed():
    label.setText(edit.text())
if __name__ == "__main__":
    app = QApplication([])
    label = QLabel()
    label.resize(300,50)
    edit = QLineEdit()
    edit.returnPressed.connect(pressed)
    label.move(0,0)
    edit.move(0,100)
    label.show()
    edit.show()
    app.exec_()
MrViktor
Rodegast
Нет. Он создаёт просто окно и пытается использовать его как диалог.
Я это и имел в виду, немного не правильно выразился.

Kyrym
меня интересует оба варианта.
Я тоже по началу подумал, что меня интересуют оба варианта, но потом подумал, где мне может понадобиться из дочернего передавать в родителя информацию (сигнал) без закрытия первого и не смог себе представить такой задачи. Кто нибудь может сказать, где такое действие необходимо? чисто для примера.
Kyrym
MrViktor
Кто нибудь может сказать, где такое действие необходимо?
Конечно!
Это всякого рода расчётные программы (калькуляторы, конверторы). Конечно, эти программы можно сделать отдельно, но тогда передача информации будет происходить через буфер, что будет приводить к лишним кнопкам. Суть в том, что после передачи данных, дочернее окно показывает некую информацию, введённые данные, позволяет осуществить повторную отправку данных с небольшим корректированием переменных.
Kyrym
vic57. Что означает данный код?
Что я понял:
- этот код вставляется в родительский файл;
- в поле вводим текст, жмём enter, сигнал запускает функцию pressed;
- функция вставляет текст в label.
А где связь с дочерним окном?
Kyrym
PEHDOM
Первый и третий варианты не работают.
А вот второй заработал, за что спасибо!
vic57
Kyrym
А где связь с дочерним окном
зачем? у тебя нет ни наследования, ни общего лэйаута, только обмен данными между виджетами.
 from PyQt4.Qt import *
import sys
class W(QWidget):
    def __init__(self,parent=None):
        QWidget.__init__(self)
        self.edit = QLineEdit()
        self.btn = QPushButton('Push')
        layout = QVBoxLayout(self)
        layout.addWidget(self.edit)
        layout.addWidget(self.btn)
        
def btnClicked():
    if w2.isVisible(): w2.hide()
    elif w2.isHidden(): w2.show()
def editPressed():
    w1.edit.setText(w2.edit.text())
    
def app_quit():
    sys.exit()
    
if __name__ == "__main__":
    app = QApplication([])
    app.lastWindowClosed.connect(app_quit)
    w1 = W()
    w1.edit.setReadOnly(True)
    w2 = W()
    w2.btn.setEnabled(False)
    w1.btn.clicked.connect(btnClicked)
    w2.edit.returnPressed.connect(editPressed)
    w1.move(100,100)
    w1.show()
    app.exec_()
MrViktor
Kyrym
Это всякого рода расчётные программы (калькуляторы, конверторы).
Извиняюсь, но я даже не представляю таких конверторов и калькуляторов. К примеру есть некая программа с главным окном (родитель), из нее вызываем конвертер (дочернее). В дочернем мы что-то конвертируем и возвращаем родителю, так? Но зачем оставлять открытым дочернее окно? Да и можно сделать наподобие QDateEdit, типа всплывающего калькулятора, как в 1С.
Может просто мне таких задач не попадалось.
PEHDOM
MrViktor
где мне может понадобиться из дочернего передавать в родителя информацию (сигнал) без закрытия первого и не смог себе представить такой задачи. Кто нибудь может сказать, где такое действие необходимо? чисто для примера.

Банально откройте в фотошопе любой рисунок, вызовите Изображение - корекция - яркость/контрасность
у вас появиться окно с двумя ползунками и кнопками ОК и Calcel. Вы изменяете положение ползунокв, и сразу видите изменения на холсте. вы можете легко подобрать нужные вам значения.А теперь представте что изменения на холсте будут появляться только при нажатии кнопки ОК и закрытии окна. Простая операция по коррекции ярктости превратиться в адъ.



Kyrym
Первый и третий варианты не работают.
проверте внимательно может неправильно чтото скопировали , у меня все варианты работали.
MrViktor
PEHDOM
Банально откройте в фотошопе любой рисунок, вызовите Изображение - корекция - яркость/контрасность
Я думаю, что тут другое поведение, а именно рисунок - это данные (модель), холст и прочее это представления и делегаты. Дальше думаю не стоит продолжать, все таки немного не по теме.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB