Python PyQt-生成两个菜单,一个所需菜单

Python PyQt-生成两个菜单,一个所需菜单,python,csv,user-interface,pyqt,analytics,Python,Csv,User Interface,Pyqt,Analytics,下面是PyQT GUI脚本的一部分,我试图在先前定义的国家/地区菜单中创建大陆菜单。然而,出于某种原因,这个脚本制作了两组菜单;一个无标题的集合,在每个无标题的部分内是有标题的大陆(见下面的屏幕截图) 理想的结果是用包含的大陆菜单替换空白菜单。我是PyQt的新手,所以我可能在菜单定义中犯了一个简单的错误,但我一直找不到它 Continents = {} DIR = '/Users/jonathan/Documents/CountryWiseAnalytics/' with op

下面是PyQT GUI脚本的一部分,我试图在先前定义的国家/地区菜单中创建大陆菜单。然而,出于某种原因,这个脚本制作了两组菜单;一个无标题的集合,在每个无标题的部分内是有标题的大陆(见下面的屏幕截图)

理想的结果是用包含的大陆菜单替换空白菜单。我是PyQt的新手,所以我可能在菜单定义中犯了一个简单的错误,但我一直找不到它

Continents = {}
    DIR = '/Users/jonathan/Documents/CountryWiseAnalytics/'
    with open(DIR + 'UsersPerCountry.csv', 'r') as UPC:
        UsersCountry = csv.DictReader(UPC, restval=None, restkey=None, dialect='excel')
        for row in UsersCountry:
            Continent = row['Continent:']
            if Continent not in Continents:
                self.menuContinent = QtGui.QMenu(self.menuCountry)
                ContinentMenu = Continents.setdefault(Continent, self.menuContinent.addMenu(Continent))
                self.menuCountry.addAction(self.menuContinent.menuAction())
编辑:

按照你的建议,我得到了这个,如下面的评论所述


只有大陆的加入是有条件的。在循环的每次迭代中都应该添加country。 我在上一个问题中的回答是通过setdefault处理考虑;-)


我知道在for循环的每次迭代中都应该添加country,这不是这里讨论的问题。问题是为什么会出现屏幕截图中所示的空白菜单集?因为您在每次迭代中都重新定义了menuContinent,而没有为其设置任何标题。“if continents in continents:”行的目的是,每个大陆的数据库中显然有多个国家。当我用你的代码替换时,我只会得到更多与数据库中每个国家的大陆相对应的空白菜单。对不起,setdefault的最右边表达式每次都会计算。不是懒惰的评价,我的不好。更正了我的代码。谢谢!我想知道您是否知道如何分配一个功能,将国家作为每个大陆内每个国家行动的输入?
continents = {}
DIR = '/Users/jonathan/Documents/CountryWiseAnalytics/'
with open(DIR + 'UsersPerCountry.csv', 'r') as UPC:
    UsersCountry = csv.DictReader(UPC, restval=None, restkey=None, dialect='excel')
    for row in UsersCountry:
        continent = row['Continent:']
        continentMenu = continents.get(continent, None)
        if continentMenu is None:
            continentMenu = self.menuCountry.addMenu(continent))
            continents[continent] = continentMenu
        useless_action = continentMenu.addAction(row['Country:'])