通过将类方法的方法名保存在python中for循环的var中来连接到类方法

2024-09-30 00:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将PyQt4中的一些按钮连接到同一个函数中,此函数将查找按钮名称或标题与管理不同操作的实例方法名称之间的匹配

我以不同的方式将instance methods放入一个列表,迭代并尝试将其各自的函数连接到其按钮。但是我不能以任何方式使用方法callback()

##############################################
# Operatios RIG class INSTANCE
#
self.OperationsRig = OperationsFile.Operations()
#### BUTTONS TO CONNECT -----------------------#

mirrorButton.clicked.connect(self.operations_module)
flipButton.clicked.connect(self.operations_module)
resetButton.clicked.connect(self.operations_module)
visibilityButton.clicked.connect(self.operations_module)

def operations_module(self):
    # Text gives me the name to Match ------------------#
    text = self.sender().text()
    # ------------------------#
    # have 3 ways of getting the class instance methods into a list to iterate ..
    method_list = [func for func in dir(self.OperationsRig) if callable(getattr(self.OperationsRig, func))]
    methods = vars(self.OperationsRig.__class__).items()
    member =inspect.getmembers(self.OperationsRig, predicate=inspect.ismethod)

    # This var is a list to pass to the Method
    Sel_list = cmds.ls(sl=True)

    # iterate over the "self.OperationsRig" methods
    #
    """ option 1 """
    for meth in method_list:
        if text.strip().lower() in meth.lower()[:]:
            # if match, and it does, will call the class method and send the data.
            pass
            #getattr(self.OperationsRig,meth)(Sel_list)  # Executes the funcion instance, but is not
                                                         # sending the data, I've checked printing inside.
                                                         # NoneTypeObject is not iterable. no data sent.

    """ option 2 """
    for meth in methods:
        if text.strip().lower() in meth[0].lower()[:]:
            pass
            # if match, and it does, will call the class method and send the data.
            #method = meth[1]   # Gets the memory address of the function. Good.
            #method(Sel_list)   # Does not return anything, the process of the funcion gets an
                                # error at the very beggining of the method process

    """ option 3 """
    for meth in member:
        if text.strip().lower() in meth[0].lower()[:]:
            meth[1](Sel_list)  # Gets the memory address of the function. Good. as a bound method
                               # Same result as option 1 - # NoneTypeObject is not iterable. no data sent.
# --------------------------------------------------------------------------------------------------#

匹配很好,问题是调用函数。我做错了什么


Tags: ofthetextinselfiflowermethod
1条回答
网友
1楼 · 发布于 2024-09-30 00:32:48

我不知道OperationsRig类的定义,所以我自己定义了一个

既然它能成功匹配,我想这不是pyqt的问题

这是我的密码:

class OperationsRig:
    def foo(self, msg):
        print('foo:' + str(msg))
        return 'foo OK'

    def foo1(self, msg):
        print('foo1:' + str(msg))
        return 'foo1 OK'


opr = OperationsRig()

def operations_module(text):
    # Text gives me the name to Match          #
    #             #
    # have 3 ways of getting the class instance methods into a list to iterate ..
    method_list = [func for func in dir(opr) if callable(getattr(opr, func))]

    # This var is a list to pass to the Method
    Sel_list = [1,2,3]

    # iterate over the "self.OperationsRig" methods
    #
    """ option 1 """
    for meth in method_list:
        if text.strip().lower() in meth.lower()[:]:
            # if match, and it does, will call the class method and send the data.
            pass
            return getattr(opr, meth)(Sel_list)  # Executes the funcion instance, but is not
                                                         # sending the data, I've checked printing inside.
                                                         # NoneTypeObject is not iterable. no data sent.
print(operations_module('foo'))
print(operations_module('foo1'))

结果是:

foo:[1, 2, 3]
foo OK
foo1:[1, 2, 3]
foo1 OK

Process finished with exit code 0

它按我的预期运行,我仍然不明白为什么你的代码失败了。或者你能进一步解释一下

相关问题 更多 >

    热门问题