当我为QSpinBox使用valueChanged
信号时,当我单击箭头时,以及当我在QSpinBox的文本字段中键入任何字符时,它都会做出反应。你知道吗
我希望QSpinBox有一个editingFinished
信号,所以当我更改spinbox文本字段中的值时,它只在Enter或Tab上起作用。你知道吗
显然,根据以下链接,这曾经是一种可能性:
不幸的是,当我使用此代码时:
self.spinbox.editingFinished.connect(self.on_spinbox_change_value)
。。。我得到:
...
File "test/test.py", line 63, in __init__
self.spinbox.editingFinished.connect(self.on_spinbox_change_value)
TypeError: decorated slot has no signature compatible with editingFinished()
所以,显然,这在PyQt5中不再是一种可能性了?有没有一个变通方法可以替代?你知道吗
编辑:一个最小的可复制示例:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.slider_hbox = QHBoxLayout()
self.tspinbox = QSpinBox()
self.tspinbox.setMinimumSize(1,1)
self.tspinbox.setMaximum(100)
#self.tspinbox.valueChanged.connect(self.on_tspinbox_change) # works, but reacts on every new character typed in textbox of spinbox
self.tspinbox.editingFinished.connect(self.on_tspinbox_change) # TypeError: decorated slot has no signature compatible with editingFinished()
self.slider_hbox.addWidget(self.tspinbox, 1)
self.setLayout(self.slider_hbox)
self.setGeometry(300, 300, 220, 170)
self.setWindowTitle('Tester')
self.show()
@pyqtSlot(int)
def on_tspinbox_change(self, value):
print("on_tspinbox_change {}".format(value))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
事实上,它是有效的-我只是在粘贴
@pyqtSlot(int)
时出错了-它应该是@pyqtSlot()
(分别是def on_tspinbox_change(self):
);下面是正确的代码:现在,只有当您在spinbox文本字段中键入内容后按回车键时才有打印输出,而不是在spinbox文本字段中的每个按键上。。。你知道吗
相关问题 更多 >
编程相关推荐