Python Kivy Garden-多个Chromium嵌入式浏览器,只能更改第一个创建的浏览器的URL吗?

Python Kivy Garden-多个Chromium嵌入式浏览器,只能更改第一个创建的浏览器的URL吗?,python,python-2.7,kivy,chromium-embedded,Python,Python 2.7,Kivy,Chromium Embedded,在我的代码中,我有一个GridLayout,其中有几行按钮文本输入。我还有一个字典,其中的键表示索引和值。无论何时按下按钮,GridLayout都会重新构造,以便用关联的浏览器替换该按钮。或者,如果尚未创建浏览器,则会构建一个新浏览器并将其添加到词典中 制作的每个浏览器都存储在此词典中(因为从网格中删除/删除浏览器似乎不会阻止它们在后台运行。例如:音频继续播放),因此每当按下某个按钮时,当前存在的每个浏览器都应该将其URL改为“空白站点” 但是,出于某种原因,任何更改浏览器URL的调用都只会更改

在我的代码中,我有一个GridLayout,其中有几行按钮文本输入。我还有一个字典,其中的键表示索引和值。无论何时按下按钮,GridLayout都会重新构造,以便用关联的浏览器替换该按钮。或者,如果尚未创建浏览器,则会构建一个新浏览器并将其添加到词典中

制作的每个浏览器都存储在此词典中(因为从网格中删除/删除浏览器似乎不会阻止它们在后台运行。例如:音频继续播放),因此每当按下某个按钮时,当前存在的每个浏览器都应该将其URL改为“空白站点”

但是,出于某种原因,任何更改浏览器URL的调用都只会更改第一个创建的浏览器的URL。你知道为什么吗?或者我怎样才能改变这个

相关代码:

def replaceButton(self, instance):
    browserNumber = instance.getIndex()/2
    try:
        browser = self.activeBrowsers[browserNumber]
        browser.change_url(instance.getURL())
    except KeyError: #browser doesn't already exist
        self.activeBrowsers[browserNumber] = CefBrowser(start_url=instance.getURL(), size_hint_x=1,
                                                        size_hint_y=None)
        browser = self.activeBrowsers[browserNumber]
    self.feed.replace(instance.getIndex(), browser)

def restartFeed(self):
    self.feed.empty()
    for browser in self.activeBrowsers.values():
        print(browser)
        browser.change_url('http://blank.org/')
    self.readData()

我可以想象replaceButton方法由于一个逻辑错误而无法工作,但我已经检查了restartFeed中的各个浏览器对象,尽管每个对象都是唯一的,但仍然只有第一个对象似乎更改了其URL。

编辑:这在CEFPythonV31中得到了修复

不幸的是,这是Python中的一个bug。您只能使用一个
浏览器
实例,因为某些方法(如
LoadUrl
ExecuteJavascript
)始终会影响创建的第一个
浏览器。:(

看起来修复程序已经找到,并计划在下一个版本中发布。您可以尝试从源代码下载并构建CEFPython,必要时在该问题链接中应用补丁


解决方法是使用正确的起始URL创建每个
浏览器
,然后销毁并重新创建
浏览器
,以更改URL。但这非常低效。

Hmm,你能给我留下一段代码来最终删除浏览器吗?我以前的尝试似乎让浏览器在后台运行und.例如,从网格对象中删除浏览器并删除引用后,音频会继续从链接播放。我自己没有尝试过(我的应用程序中只需要一个浏览器),但您可能只需要调用
browser.CloseBrowser(True)
。很遗憾,CloseBrowser()似乎没有在Kivy Garden小部件中定义,但还是要感谢!CEFPython
Browser
实例存储在
Browser
属性中。因此调用
.Browser.CloseBrowser(True)