我想在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_())
感谢任何帮助。
答案 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
方法,它具有相同的效果。