Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2018 18:20:47

noob_in_py
Зарегистрирован: 2018-10-03
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT4 сигналы между классами

Доброго времени суток. Совсем новичек.
Python 2.7, PyQT4
Пытаюсь разобраться с сигналами в PyQT4. Если внутри класса проблем не возникает, то из одного в другой пробросить сигнал не получается. Набросал небольшой скрипт, на нем и пытаюсь это дело опробовать.

 #!/usr/bin/env python
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
import sys
class MainWind(QWidget):
        
    def __init__(self, parent=None):
        super(MainWind, self).__init__(parent)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.resize(480, 80)
               
        self.label_1 = QtGui.QLabel("11111111")
        self.button_ok = QtGui.QPushButton("ok")
        self.button_e = QtGui.QPushButton("exit")
        
        self.vlayout = QtGui.QVBoxLayout()
        self.vlayout.addWidget(self.label_1)
        self.vlayout.addWidget(self.button_ok)
        self.vlayout.addWidget(self.button_e)
        
        self.setLayout(self.vlayout)
        
        
        self.button_ok.clicked.connect(self.operateval_show)
        self.button_e.clicked.connect(QtGui.qApp.quit)
        oper = OperateVal()
        oper.okClicked.connect(self.changetext)
        
        
    def operateval_show(self):
        win = OperateVal(self)
        win.show()
    
    def changetext(self):   
        self.label_1.setText('22222222222222')    
    
        
class OperateVal(QWidget):
    
    okClicked = QtCore.pyqtSignal()
    
    def __init__(self, parent=None):
        super(OperateVal, self).__init__(parent)
        self.setWindowFlags(Qt.Dialog)
        self.resize(500, 50)
        
        self.button_e = QtGui.QPushButton("exit")
        self.button_ok = QtGui.QPushButton("ok")
        
        self.vlayout = QtGui.QVBoxLayout()
        self.vlayout.addWidget(self.button_ok)
        self.vlayout.addWidget(self.button_e)
        
        self.setLayout(self.vlayout)
        
        self.button_ok.clicked.connect(self.okclick)
        self.button_e.clicked.connect(self.close)
        
 
        
    def okclick(self):
        self.okClicked.emit()
        
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = MainWind()
    window.show()
    sys.exit(app.exec_())       

Суть проста: из MainWind вызываем OperateVal, в нем по кнопке “ОК” в MainWind надо изменить label_1.
На сколько я понимаю, сигнал эмитится, но не ловится в MainWind. Подскажите в какую сторону смотреть.
Всем спасибо.

Отредактировано noob_in_py (Окт. 3, 2018 18:22:52)

Офлайн

#2 Окт. 3, 2018 18:50:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

PyQT4 сигналы между классами

 def operateval_show(self):
        win = OperateVal(self)
        win.okClicked.connect(self.changetext)
        win.show()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version