WebKit.WebView在for循环中发出信号的问题

Bgo

您好,我是Python和WebKit的新手。因此,我创建了一个简单的Gtk应用程序,该应用程序可以在WebKit.WebView中加载Internet页面列表,并且在加载页面时,会使用DOM绑定来获取网站的标题。这是通过for循环进行的,该循环逐个加载站点。但是在第一次运行for循环时,该过程会绕过WebView.connect的“负载完成”信号,并开始从列表的第二项中获取结果。我想要一些帮助...

# !/usr/bin/python
# -*- coding: UTF-8 -*-
import threading
from time import sleep
import gi
gi.require_version('WebKit', '3.0')
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, WebKit



source = ["http://imdb.com", "http://cnn.com",
          "http://wikipedia.org", "http://nokia.com"]


class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_border_width(10)
        self.set_default_size(1024, 768)
        self.notebook = Gtk.Notebook()
        self.add(self.notebook)

        self.page1 = Gtk.Box()
        self.page1.set_border_width(10)
        self.page1.set_margin_left(5)
        self.page1.set_margin_right(5)
        self.page1.set_margin_top(5)
        mainbox = Gtk.Box()
        box1 = Gtk.VBox()
        box2 = Gtk.Box()
        buttoncall = Gtk.Button("Start")
        buttoncall.connect('clicked', self.help)
        buttoncall.set_size_request(50, 50)
        scrolled = Gtk.ScrolledWindow()
        scrolled.set_border_width(10)
        scrolled.set_size_request(300, 300)
        scrolled.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
        self.web1 = WebKit.WebView()
        self.web1.set_editable(False)
        self.web1.load_uri("")
        scrolled.add(self.web1)
        box1.pack_start(buttoncall, False, False, 10)
        mainbox.pack_start(box1, False, False, 0)
        mainbox.pack_start(box2, True, True, 0)
        box1.add(scrolled)
        self.page1.pack_start(mainbox, True, True, 0)
        self.notebook.append_page(self.page1, Gtk.Label("Search info"))

    def get_source(self):
        print("enterded source")
        html = self.web1.get_main_frame().get_title()
        return html

    def help(self, widget):
        threading.Thread(target=self.start_it, args=(widget)).start()

    def start_it(self,widget):

        for i in range(len(source)):
            print(source[i])
            self.web1.load_uri(source[i])
            while (int(self.web1.get_load_status() != 2)):
                sleep(0.5)
                print("loading page")
            self.web1.connect('load-finished', self.finished_load)


    def finished_load(self, web1, frame):
        print("get finished")
        c = self.get_source()
        print(c)




window = MainWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
Andlabs

您不能从单独的线程中调用涉及任何UI的函数,无论是GTK +,WebKit还是其他。您必须从调用的线程中运行它们Gtk.main(),也许使用GLib.idle_add()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WebKit.WebView在for循环中发出信号的问题

来自分类Dev

Webkit转换缩放问题

来自分类Dev

可可webview UserAgent“ webkit-legacy”问题

来自分类Dev

Webview / Webkit无法正常工作

来自分类Dev

Android 4.2.2的WebView(Webkit 534.30)支持什么?

来自分类Dev

JavaFX 8 WebView中的WebKit版本

来自分类Dev

WebKit WebView粘贴:动态UTI失败

来自分类Dev

使用Webkit缩小时的HTML边框问题

来自分类Dev

Webkit中的保证金问题

来自分类Dev

Webkit和Moz中的布局问题

来自分类Dev

Android:WebView兼容性(Chromium和WebKit WebView)

来自分类Dev

Android:WebView兼容性(Chromium和WebKit WebView)

来自分类Dev

在循环中发出咕声

来自分类Dev

如何将Webkit webview添加到Ubuntu SDK?

来自分类Dev

如何使用python Gtk和Webkit在Webview上覆盖图像

来自分类Dev

Gtk:Webkit WebView C ++(无法加载url +尴尬的终端输出)

来自分类Dev

Gtk:Webkit WebView C ++(无法加载url +尴尬的终端输出)

来自分类Dev

OS X WebKit WebView不显示JS弹出窗口

来自分类Dev

完全禁用GTK Webkit Webview上的滚动条?

来自分类Dev

CSS3动画(Webkit关键帧)问题

来自分类Dev

iOS8 Safari -webkit-overflow-scrolling:触摸;问题

来自分类Dev

打包节点Webkit应用程序时遇到问题

来自分类Dev

CSS3动画(Webkit关键帧)问题

来自分类Dev

如何解决CSS -webkit-appearance问题

来自分类Dev

选择显示值的Chrome(WebKit)ng-model问题

来自分类Dev

ActionCable、Capybara Webkit 和 Capybara Session#window 的计时问题

来自分类Dev

在 webkit 上显示阿拉伯字体的问题

来自分类Dev

反应如何在 For 循环中发出 POST 请求

来自分类Dev

Posix线程:向在while循环中运行的线程发出信号

Related 相关文章

热门标签

归档