gpt4 book ai didi

python - PyQt - 使用 For 循环创建菜单 :

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:26 27 4
gpt4 key购买 nike

我有一个 CSV 文件,其中包含表单中的分析数据

Continent:     CT:  Country:    Count:
North America GT Guatemala 1
... ... ... ...

我想用它在我的 PyQT GUI 中创建一个“国家/地区”菜单,如下所示:

Menu made manually

如您所见,我想首先创建一个大陆菜单(可以忽略热门国家/地区),然后将数据中显示的国家/地区添加到每个大陆。到目前为止,我有这段代码,它除了加载一个空白的 GUI 之外什么也不做:

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("Country-Wise Analytics"))
MainWindow.resize(900, 700)

self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 867, 22))
self.menubar.setObjectName(_fromUtf8("menubar"))
self.menuCountry = QtGui.QMenu(self.menubar)
self.menuCountry.setObjectName(_fromUtf8("menuCountry"))
self.menuPlatform = QtGui.QMenu(self.menubar)
self.menuPlatform.setObjectName(_fromUtf8("menuPlatform"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)

cnts = []
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:
cnt = row['Continent:']
if cnt not in cnts:
cnts.append(cnt)
self.menucnt = QtGui.QMenu(self.menuCountry)
self.menucnt.setObjectName(_fromUtf8(cnt))

最佳答案

我会将 cnts 设为 dict,而不是 list ([])。

dict将从大陆名称到您通过self.menucnt.addMenu(cnt)获得的QtGui.QMenu。然后它会给你正确的 QMenu 来添加 QAction。

类似于:

cnt_menu = cnts.setdefault(cnt, self.menucnt.addMenu(cnt))
cnt_menu.addAction(row['Country:'])

比照http://pyqt.sourceforge.net/Docs/PyQt4/qmenu.html

[编辑]

我不会通过直接调用构造函数来创建菜单和菜单项,而是使用 menuItem 容器中的 add* 方法,为它们提供我希望看到的名称。直接调用构造函数,只是设置内存管理链接,而不是包含链接。

比照http://doc.qt.io/qt-4.8/objecttrees.html

顺便问一下,您确定需要 setObjectName 吗?

关于python - PyQt - 使用 For 循环创建菜单 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com