生成多个菜单项,列表在尾部

2024-06-02 06:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一些菜单选项构建了一个python rumps应用程序。但我想知道如何从列表中创建菜单或子菜单。我需要调出一个用户列表,当它被点击时,它会执行一个该用户独有的命令。你知道吗

因此,它应该连接到外部源以获取用户列表,然后将这些用户列为菜单项。单击每个将执行不同的唯一命令或选项。你知道吗

这正是我想做的,但显然这是不可能的。你知道吗

import rumps

# returns a list of users
listofusers = get_list_of_user_folders()

class OfficeToolApp(rumps.App):
    def __init__(self):
        super(OfficeToolApp, self).__init__("Tools", icon="officeimage.png")
        self.menu = listofusers

    for user in listofusers:
        @rumps.clicked(user)
        def userclick(self, _):
            change_wacom_driver.RunSync("push", user)

    @rumps.clicked("Push Settings to Jay")
    def pushjaysettings(self, _):
        change_wacom_driver.RunSync("push", "jay")

    @rumps.clicked("Push Settings to Steve")
    def pushstevesettings(self, _):
        change_wacom_driver.RunSync("push", "steve")

if __name__ == "__main__":
    OfficeToolApp().run()

我真的很惊讶,这在菜单中正确地生成了列表。按钮好像什么都没用。你知道吗


Tags: 用户self列表defdriver菜单changepush
1条回答
网友
1楼 · 发布于 2024-06-02 06:23:24

我敢打赌有更好的方法,但这是我唯一能让它发挥作用的方法:

import rumps

# returns a list of users
listofusers = ["alice", "billy", "coryn", "dana", "ernie"]


def userclick(app, menuitem):
    rumps.alert(f"push {menuitem.title} no preferences available!")


class OfficeToolApp(rumps.App):

    for user in listofusers:
        # stack the decorators
        userclick = rumps.clicked(user)(userclick)

    def __init__(self):
        super(OfficeToolApp, self).__init__("Tools")
        self.menu = listofusers

    @rumps.clicked("Push Settings to Jay Bird")
    def pushjaysettings(self, _):
        rumps.alert("push jay no preferences available!")

    @rumps.clicked("Push Settings to Steve")
    def pushstevesettings(self, _):
        rumps.alert("push steve no preferences available!")


if __name__ == "__main__":
    OfficeToolApp().run()

相关问题 更多 >