pyqt4发出信号不起作用

时间:2016-02-14 02:39:15

标签: python signals pyqt4 emit

我想在actionTracar Qaction元素上发出触发信号,但它不起作用或给出任何错误。

我已经制作了一小段代码来解决问题。但我仍然无法理解。

Trouble.py:

    transition: background-size 0s ease-in;
    -moz-transition: background-size 0s ease-in;
    -web-kit-transition: background-size 0s ease-in;

Tela.py:

# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QApplication, QMainWindow, QDoubleValidator
from Tela import Ui_MainWindow
class JanelaPolinomio (QMainWindow, Ui_MainWindow):

    def __init__(self):        
        super(JanelaPolinomio, self).__init__()       
        self.setupUi(self)
        self.actionTracar.emit(SIGNAL("triggered()"))

    def on_actionTracar_triggered(self):
        print "test"

if __name__ == '__main__':
    app = QApplication(sys.argv)    

    jan = JanelaPolinomio()   
    jan.show()        

    sys.exit(app.exec_())

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题是,QAction的{​​{3}}信号与您使用bool参数时所使用的信号具有不同的签名,因此发出此类信息的正确方法使用旧式信号的信号将是:

self.actionTracar.emit(SIGNAL("triggered(bool)"), False)

建议在PyQt中使用新的样式信号。如果您尝试使用新样式信号,则会出现错误,表明错误而不是默默地失败:

>>> jan.actionTracar.triggered.emit()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: QAction.triggered[bool] signal has 1 argument(s) but 0 provided

PyQt5将遵循checked=false的默认参数,所以同样可以在那里工作,但PyQt4没有,所以你需要明确地给出参数:

>>> jan.actionTracar.triggered.emit(False)

发出信号的另一种方法是简单地在动作上调用triggered方法,它具有相同的效果。