convert PyQt4 string styled signal to PyQt5 Signal

后端 未结 2 1031
别那么骄傲
别那么骄傲 2021-01-26 16:23

I usually write a small function to create QActions. But PyQt5 doesn\'t support function SIGNAL() anymore. I don\'t know how to rewrite this function beautifully.



        
相关标签:
2条回答
  • 2021-01-26 16:36

    The problem here is about use a string (by name) to reference a signal.

    There are three ways to connect signals under PyQt5. see connecting signals by kwargs So I come out with this solution.

    def createAction(self, text, slot=None, signal='triggered'):
        action = QAction(text, self)
        signal_dict = {'triggered':action.triggered, 'changed':action.changed,
                        'toggled':action.toggled, 'hovered':action.hovered }
        if slot is not None:
            # self.connect(action, SIGNAL(signal), slot)
            signal_dict[signal].connect(slot)
        return action
    
    0 讨论(0)
  • 2021-01-26 16:42

    I think you may be over-thinking this. New-style signals are instance attributes, so you can just use getattr:

    def createAction(self, text, slot=None, signal='triggered'):
        action = QAction(text, self)
        if slot is not None:
            getattr(action, signal).connect(slot)
        return action
    
    0 讨论(0)
提交回复
热议问题