Форум сайта python.su
Пытаюсь сделать контекстное меню для QSystemTrayIcon
Конфигурация в ini-файле:
[1]
name="Редактор"
cmd="/usr/bin/kate"
[2]
name="еще редактор"
cmd=/usr/bin/vim
class Tray(QtGui.QMainWindow):
def __init__(self, win_parent = None):
QtGui.QMainWindow.__init__(self, win_parent)
self.createIcon()
def createIcon(self):
self.icon = QtGui.QSystemTrayIcon()
self.icon.setIcon(QtGui.QIcon('Bug.png'));
self.conf = self.loadConfig(os.environ["PROFILEHOME"]+"/"+".pytray.ini")
pass;
#print self.conf
self.actions = list()
self.slots = list()
self.menu = QtGui.QMenu()
self.createActions()
self.icon.setContextMenu(self.menu)
self.icon.show();
def createActions(self):
for name,sect in self.conf.items():
#self.actions[name] = QtGui.QAction(sect[name]["name"],self)
#print name
#print "))_"
#print sect["name"]
#print "******************"
#self.actions.append(QtGui.QAction(sect["name"],self))
self.menu.addAction(QtCore.QString(sect["name"]));
def loadConfig(self,filename):
"""Convert an INI file to a dictionary"""
import ConfigParser
config = ConfigParser.ConfigParser()
config.read(filename)
result = {}
for section in config.sections():
if section not in result:
result[section] = {}
for option in config.options(section):
value = config.get(section, option)
result[section][option] = value
return result
def saveConfig(self, iniFile='config.ini'):
"""Convert an dictionary to a INI file"""
import ConfigParser
config = ConfigParser.ConfigParser()
config_dict = self.data
for section, values in config_dict.items():
config.add_section(section)
for var_name, var_value in values.items():
config.set(section, var_name, var_value)
config.write(open(iniFile, 'w'))
app = QtGui.QApplication(sys.argv)
#The Main window
main_window = Tray()
#main_window.show()
# Enter the main loop
app.exec_()
Офлайн
а если unicode() на параметр при подгрузке? Плюс для русских названий в Qt есть функция энкодирования:
QtGui.QApplication.translate(“MainWindow”, text, None, QtGui.QApplication.UnicodeUTF8)
Офлайн
Qt принимает только религиозно правльный unicode() :)
Офлайн