我正在设计一个PyQt
窗口,在其中调用FileOpenDialog
。一旦从FileOpenDialog
获得返回值,loadItem()
将加载图像。我想记录这个事件并将其附加到log,这是一个QListWidget。我想用一个装饰器来实现这一点,以增强代码的可重用性和干净性。你知道吗
我已经创建了一个名为logAction
的类装饰器,它将根据函数和*参数向QListWidget
添加一个字符串。你知道吗
class logAction:
def __init__(self, function):
self.function=function
def __call__(self, *args, **kwargs):
if(function.__name__ == "promptOpen"):
self.logOpen()
def logOpen(*args, **kwargs):
import re
extensionPattern = re.compile(r"""
^(.+?)
([^\\]+)$
""", re.VERBOSE)
file = extensionPattern.search(args[0])
self.log.addItem(f"Loaded {file}")
def promptOpen(self):
self.openDialog = FileOpenDialog(self)
@logAction
def loadItem(path):
pass
loadItem(self.openDialog.filePath)
NameError: name 'logAction' is not defined
错误在@logAction处。如何允许loadItem()
由logAction
修饰,而不将类放在promptOpen()
中?你知道吗
结果:干得好 这里
你写的
if(function.__name__ == "loadItem"):
没有self作为self.function.__name__
函数名是错误的,它没有指向正确的函数名我只是想用我的方式复制一下你的代码。你知道吗
如果您添加
if(self.function.__name__ == "loadItem")
,您的代码将会很好相关问题 更多 >
编程相关推荐