PyQt5 - TypeError" NoneType"当使用* args w / o functools时

时间:2017-11-20 01:20:08

标签: python-2.7 pyqt5

我在maingui(PyQt5)脚本中使用* args时出现两次错误,不确定原因。我在做什么不是pythonic / pyqt5风格?

首先尝试:

从GUI中调用时出现错误的代码行:

def createActions(self):
    ...
    self.lineEdit.returnPressed.connect(self.updateUi('buttons'))

错误:

Traceback...(snippet)
...
self.lineEdit.returnPressed.connect(self.updateUi('buttons'))
TypeError: argument 1 has unexpected type 'NoneType'

它可能不是一个函数......所以我把它改为我的第二次尝试,正如Mark Summerfield在使用python和PyQt进行RapidGUI编程中所述,第133页:

def createActions(self):
    ...
    self.lineEdit.returnPressed.connect(functools.partial(self.updateUi, 'buttons'))

 def updateUi(self, *args):

        if args == 'color_update':
            color = self.colorCh2comboBox.currentText()

            if color == 'Violet':
                print '%s is purple' % color
            else:
                print color

        elif args== 'buttons':

            try:
                print 'yes'
                ...
            except:
                print "no"
                ...
        else:
            print "Unknown action : %s" % args
  

结果:"未知操作:按钮

在我尝试的第三次尝试中:

def updateUi(self, *args):

    argument = str(args)   # just to be sure I'll parse a string and not something else.
    ...etc... # as above.

还有什么呢?

1 个答案:

答案 0 :(得分:0)

接下来我做了什么...用type检查args发生了什么。

我的代码:

def updateUi(self, *args):

        argument = str(args)
        print type(argument), type(args)

结果:

<type 'str'> <type 'tuple'>
yes  # from the   try... print 'yes'
no   # from the except.. print 'no'

所以..args是一个元组(doh!)。

代码修改如下,现在可以使用: - )

def updateUi(self, *args):

        argument = str(args)
        print type(argument), type(args)

        for item in args:
            if color == 'Violet':
                color = ...etc.