0

我想要一个基于 webkit 的简单 webview,具有固定大小(例如 200x200)并且没有任何滚动条。我使用没有窗口管理器的 X。

我尝试了以下 Python 代码:

import gtk 
import webkit 

view = webkit.WebView() 

sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
sw.add(view)

win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.add(sw) 
win.set_default_size(200, 200) 
win.show_all()

view.open("http://www.blackle.com") 

gtk.main()

滚动条仍然显示,尽管它们不应该显示。

我还尝试遵循不同的路径并使用以下方法完全删除 GTK 上的滚动条~/.gtkrc-2.0

style "custom-scrollbar-style"
{
  GtkScrollbar::slider_width = 0
  GtkScrollbar::min-slider-length = 0
  GtkScrollbar::activate_slider = 0
  GtkScrollbar::trough_border = 0
  GtkScrollbar::has-forward-stepper = 0
  GtkScrollbar::has-backward-stepper = 0
  GtkScrollbar::stepper_size = 0
  GtkScrollbar::stepper_spacing = 0
  GtkScrollbar::trough-side-details = 0
  GtkScrollbar::default_border = { 0, 0, 0, 0 }
  GtkScrollbar::default_outside_border = { 0, 0, 0, 0 }
}
widget_class "*Scrollbar" style "custom-scrollbar-style"

即使这样,它仍然在滚动条所在的窗口两侧显示细白线。

有任何想法吗?

4

3 回答 3

0

好的,事情就是这样。您不需要滚动条,但您构建了一个 Gtk.ScrolledWindow 作为 WebKit.WebView 的容器。如果您不想要滚动条,只需将其放入未实现 Gtk.Scrollable 的容器中,例如 Gtk.Grid。它根本不会显示滚动条。几个缺点:

  1. 您的主窗口不会缩小超出其内容的最小宽度和高度。
  2. 如果您的视图内容更改大小,并且它会(除非您限制有关如何显示视图的最后一个细节),则窗口也将遵循当前大小
  3. 在 WebKit.WebView 小部件中,没有 Gtk.Widget.set_size_request 这样的东西,它仍然会跟随它的内容。顺便说一句, Gtk.Widget.set_default_size() 不会为一个小部件创建一个固定大小,只在第一次显示时设置大小。
于 2014-07-21T16:28:06.270 回答
0

我尝试使用信号处理程序,但它不起作用。

通过 GTK 文档,我看到了 ScrolledWindow 的 2 个样式属性,我没有包含在以前的样式(scrollbar-spacingscrollbar-within-bevel)中。所以最终的代码(不写~/.gtkrc-2.0)现在是:

import gtk
import webkit

gtk.rc_parse_string("""style "hide-scrollbar-style"
{
  GtkScrollbar::slider_width = 0
  GtkScrollbar::min-slider-length = 0
  GtkScrollbar::activate_slider = 0
  GtkScrollbar::trough_border = 0
  GtkScrollbar::has-forward-stepper = 0
  GtkScrollbar::has-backward-stepper = 0
  GtkScrollbar::stepper_size = 0
  GtkScrollbar::stepper_spacing = 0
  GtkScrollbar::trough-side-details = 0
  GtkScrollbar::default_border = { 0, 0, 0, 0 }
  GtkScrollbar::default_outside_border = { 0, 0, 0, 0 }
  GtkScrolledWindow::scrollbar-spacing = 0
  GtkScrolledWindow::scrollbar-within-bevel = False
}
widget_class "*Scrollbar" style "hide-scrollbar-style"
widget_class "*ScrolledWindow" style "hide-scrollbar-style"
""")

view = webkit.WebView()
sw = gtk.ScrolledWindow()
sw.add(view)
sw.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS)

win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.add(sw)
win.set_default_size(200, 200)
win.show_all()

view.open("http://www.blackle.com/")

gtk.main()

虽然不优雅,但这对我有用,因为我不关心整个 X 会话中的滚动条。

于 2014-08-04T09:30:09.407 回答
0

以下对我有用

class PREview(object):
    def __init__(self, project_directory):
        # Make the HTML viewable area
        self.wv = webkit.WebView()
        self.wf = self.wv.get_main_frame()
        self.wf.connect("scrollbars-policy-changed", self.on_webkit_webframe_scrollbars_policy_changed)

def on_webkit_webframe_scrollbars_policy_changed(self, widget):
    return True # to stop propagation

然后在主程序中......

self.out_scroll = gtk.ScrolledWindow()
self.out_scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
self.PV = PREview(self)
self.out_scroll.add(self.PV.wv)
于 2015-12-14T16:28:08.930 回答