【发布时间】:2019-08-17 01:42:30
【问题描述】:
我正在尝试将小部件列表传递给 ca ontextmanager,我在其中尝试使用 QDoubleValidators 设置它们。
我的初始代码如下:
validator = QtGui.QDoubleValidator()
validator.setDecimals(2)
self.ui.retailPriceLineEdit.setValidator(validator)
self.ui.discountPriceLineEdit.setValidator(validator)
self.ui.onlinePriceLineEdit.setValidator(validator)
...
基本上我有大量的 QLineEdits,我在其中设置了 2 个小数位的输入限制。
我不太确定 contextmanager 在这种情况下是否有帮助,但我正在尝试以下方法:
class TestValidator:
def __init__(self, widgets_list=None):
self.validator = QtGui.QDoubleValidator()
self.validator.setDecimals(2)
self.widgets_list = widgets_list
print widgets_list
def __enter__(self):
for w in self.widgets_list:
w.setValidator(self.validator)
def __exit__(self):
pass
当我尝试将其运行为:
self.test_validator = utils.TestValidator()
my_widgets = [self.ui.retailPriceLineEdit, self.ui.discountPriceLineEdit, self.ui.onlinePriceLineEdit]
with self.test_validator(my_widgets):
pass
我遇到了几个错误,例如:AttributeError: TestValidator instance has no __call__ method #
即便如此,将小部件传递给上下文管理器是否是一个明智的想法?
(仅供参考,我的小部件/ ui 是从 qt 设计器创建的)
【问题讨论】:
-
self.test_validator已经是utils.TestValidator的一个实例。请改用with utils.TestValidator(my_widgets):。此外,在退出上下文时,您可能希望恢复行编辑的原始验证器。否则,使用上下文管理器有什么意义。 -
@Heike 您能否详细说明您提到的“恢复原始验证器”?
标签: python pyqt pyqt4 qlineedit qvalidator