我在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.
还有什么呢?
答案 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.