没有参数的函数不起作用。但为什么?

function without argument doesnt work. but why?

我想问一个简单的问题。我有 2 classes。我有很多功能。我在 class operationsOnFiles() 上保留函数,在 class UI_MainWindow(object) 上保留 ui 元素。我使用带有 liste 参数的 btnSetRandomWallpaper 按钮调用 settingRandomWallpaper() 函数,但它没有用。所以我在那里使用了lambda。然后就可以了。 我试图用我的其他功能 updateList() 做同样的事情。它没有任何争论。同样的错误,我也在那里使用 lambda 。没有错误,但也没有采取任何行动。我错过了一点吗?还是什么?

class operationsOnFiles():
    def settingRandomWallpaper(self, liste):
        super().__init__()
        selectedWallpaper = random.choice(liste)
        os.system("gsettings set org.gnome.desktop.background picture-uri /home/$USER/Projects/src/" + selectedWallpaper)
    def updateList():
        super().__init__()
        Ui_MainWindow.listWidget.addItems(selfish.wallpapers)
selfish = operationsOnFiles()

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.btnSetRandomWallpaper.clicked.connect(lambda: selfish.settingRandomWallpaper(selfish.wallpapers))
        self.btnUpdateList.clicked.connect(lambda: operationsOnFiles.updateList)

首先需要在函数中加入参数self

那你需要把ui-element的命令改成:

lambda: operationsOnFiles.updateList

至:

lambda: operationsOnFiles.updateList()

connect 事件调用时没有参数。如果目标函数需要一些在创建侦听器时已知的参数,您可以使用 lambda 来绑定该值。如果目标不需要参数,则不需要中间lambda。在你的情况下,问题是你创建了一个 lambda 只是 returns 你想要的方法。至少它应该 调用 方法。但是因为它不需要额外的参数,所以根本不需要 lambda。

self.btnUpdateList.clicked.connect(operationsOnFiles.updateList)

这将暴露您代码中的下一个错误,updateList 需要一个 self (def updateList(self):。然后调用 super 的 __init__ 真的很奇怪。