PyQt5 Getter和Setters

时间:2018-11-19 16:27:55

标签: python python-3.x pyqt pyqt5

为了尝试为自己提供一种在python中进行绑定的方法,我有以下代码:

wname = QLineEdit()
dname = "Test Value"
sattr  = getattr(wname, "text")

如何使用上面的信息将dname的值分配给wname?

我确实知道setText()通常会在这里使用;但是,我正在探索一种绑定方法,我想知道如何利用getattr()函数为传递的小部件提取设置器和获取器。谢谢!!!

2 个答案:

答案 0 :(得分:0)

不确定我是否明白这一点,但可以通过

final_list = (1, "Baseline")  
values = [1.0, None, False, True, 1, 100, 'ovr', 1, 'l2', None, 'liblinear', 0.0001, 0, False]

print([final_list + (x, ) for x in values])

# [(1, 'Baseline', 1.0),
#  (1, 'Baseline', None), 
#  (1, 'Baseline', False),
#  (1, 'Baseline', True),
#  (1, 'Baseline', 1), 
#  (1, 'Baseline', 100), 
#  (1, 'Baseline', 'ovr'), 
#  (1, 'Baseline', 1), 
#  (1, 'Baseline', 'l2'), 
#  (1, 'Baseline', None), 
#  (1, 'Baseline', 'liblinear'), 
#  (1, 'Baseline', 0.0001),
#  (1, 'Baseline', 0),
#  (1, 'Baseline', False)]

您要检索的是函数而不是其中的文本。因此,通过致电

sattr = getattr(wname, "text")

您将设置文本。写作也一样:

sattr("abc")

答案 1 :(得分:0)

与亚历山德罗所说的类似,您需要先使用getattr获取二传手,然后使用您的文字来调用它:

wname = QLineEdit()
dname = "Test Value"
sattr = getattr(wname, "setText")
sattr(dname)

如果您想构建一些基于属性名称同时获取getter和setter的代码,我想您可以执行以下操作:

def get_getters_and_setters(widget, name):
    return getattr(widget, name), getattr(widget, 'set' + name[0].upper() + name[1:]

相反,如果您希望使用类似getattrsetattr的Python属性,但是对于已经存在的窗口小部件属性,我想您可以执行以下操作,但是看起来对我来说有点过分了:

class CustomLineEdit(QtWidgets.QLineEdit):

    @property
    def textAttribute(self):
        return self.text()

    @textAttribute.setter
    def textAttribute(self, value):
        self.setText(value)

wname = CustomLineEdit()
dname = "Test Value"
setattr(wname, 'textAttribute', dname)