Python/Gtk启动多个AppIndicator实例

问题描述:

免责声明:我对Python和Ubuntu相当陌生。完整的代码是https://github.com/bluppfisk/coinprice-indicator/tree/multipletickersPython/Gtk启动多个AppIndicator实例

我正在调整cryptocoin价格报价器,它使用libappindicator在Ubuntu的任务栏中显示,以便能够运行自己的多个实例。

但是,它看起来像系统无法区分各种通知项目,并尝试覆盖它们而不是添加另一个通知项目。错误:

libappindicator-WARNING **: Unable to register object on path '/org/ayatana/NotificationItem/Coin_Price_indicator': An object is already exported for the interface org.kde.StatusNotifierItem at /org/ayatana/NotificationItem/Coin_Price_indicator

我认为创建Indicator类的新实例(它启动NotificationItem)应该自动执行此操作。此外,我多线程他们并启动线程后,开始主要基于GTK主题:

for cp_instance in cp_instances: 
    ++counter 
    settings = cp_instance['exchange'] + ':' + cp_instance['asset_pair'] + ':' + str(cp_instance['refresh']) 
    indicator = Indicator(config, 'indicator' + str(counter), counter, config, settings) 
    indicators.append(indicator) 

for indicator in indicators: 
    indicator.start() 
    indicator.join() 

Gtk.main() 

Indicator.py

class Indicator(object): 
    def __init__(self, config, settings=None): 
     self.config = config 

     self.settings = Settings(settings) 
     self.refresh_frequency = self.settings.refresh() 
     self.active_exchange = self.settings.exchange() 

     icon = self.config['project_root'] + '/resources/icon_32px.png' 
     self.indicator = AppIndicator.Indicator.new(self.config['app']['name'], icon, 
                AppIndicator.IndicatorCategory.APPLICATION_STATUS) 
     self.indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) 
     self.indicator.set_label("syncing", "$888.88") 

     self.exchanges = None 
+0

大概可以不用多线程。我认为罪魁祸首是NotificationItem的多个实例 – bluppfisk

+0

很难说出代码片断的作用(我们不知道变量是什么,Indicator()构造函数看上去很腥 - 方法签名应该是什么?) – jku

+0

为指标添加了代码片段,希望有助于搞清楚。 – bluppfisk

问题是与AppIndicator.Indicator.new()。运行多个实例将始终获得相同的名称,因此占据彼此的空间。更改每个实例运行的第一个参数就是解决方案。