我有
形式的分析数据CSV文件Continent: CT: Country: Count:
North America GT Guatemala 1
... ... ... ...
我想用来制作一个国家'我的PyQT GUI中的菜单如下所示:
正如您所看到的,我想首先创建一个大陆菜单(可以忽略热门国家/地区),然后将国家/地区添加到数据中显示的每个大陆。到目前为止,我有这个代码,除了加载一个空白的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))
答案 0 :(得分:1)
我会cnts
成为dict
,而不是list
([]
)。
dict
QtGui.QMenu
从大陆名称到self.menucnt.addMenu(cnt)
cnt_menu = cnts.setdefault(cnt, self.menucnt.addMenu(cnt))
cnt_menu.addAction(row['Country:'])
。
然后它会给你正确的QMenu来添加QAction。
类似的东西:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this)
.load("https://api.backendless.com/CF512434-CCA8-067C-FF92-D76481A44000/v1/files/profilePhotos/mubtada.syedprofileImage.png")
.placeholder(new ColorDrawable(ContextCompat.getColor(MainActivity.this, R.color.placeholder_gray)))
.error(new ColorDrawable(ContextCompat.getColor(MainActivity.this, R.color.placeholder_gray)))
.into(imageView);
cf http://pyqt.sourceforge.net/Docs/PyQt4/qmenu.html
[编辑]
我不会通过直接调用构造函数来创建菜单和menuitems,而是使用menuItem容器中的add *方法,给出我想要看到的名称。 直接调用构造函数,只需设置内存管理链接,而不是包含链接。
Cf http://doc.qt.io/qt-4.8/objecttrees.html
顺便问一下,你确定需要setObjectName吗?
答案 1 :(得分:0)
工作回答:
Continents = {}
CTs = {}
popCT = ['United States', 'United Kingdom', 'South Africa', 'Germany', 'India', 'Australia', 'Canada', 'Italy', 'Sweden' ,\
'Netherlands', 'France', 'New Zealand', 'Belgium', 'Switzerland', 'Norway', 'Brazil', 'Indonesia', 'Russia', \
'United Arab Emirates', 'Spain', 'Denmark']
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
countryAction = continentMenu.addAction(row['Country:'])
CT = row['Country:']
if CT in popCT:
self.actionCT = QtGui.QAction(self.menuPopular_Countries)
self.actionCT.setObjectName(_fromUtf8(CT))
CTMenu = CTs.setdefault(CT, self.menuPopular_Countries.addAction(CT))