完全禁用GTK webkit webview上的滚动条?

时间:2014-07-18 15:49:15

标签: python webkit gtk pygtk webkitgtk

我想要一个基于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()

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

我还尝试使用~/.gtkrc-2.0跟随不同路径并完全删除GTK上的滚动条:

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"

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

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

好的,这就是事情。您不想要滚动条但是您构造了一个Gtk.ScrolledWindow作为WebKit.WebView的容器。如果你不想要滚动条,只需放入一个没有实现Gtk.Scrollable的容器,比如说Gtk.Grid。它根本不会显示滚动条。几个缺点:

  1. 您的主窗口的尺寸不会超出其最小宽度和高度。
  2. 如果您的视图内容更改大小,并且(除非您限制视图显示方式的每个细节),该窗口也将遵循当前大小
  3. 在WebKit.WebView小部件中,没有Gtk.Widget.set_size_request这样的东西,它会 仍然遵循其内容。顺便说一句,Gtk.Widget.set_default_size()不会为窗口小部件创建修复大小,只会在第一次显示时设置大小。

答案 1 :(得分: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会话中的滚动条。

答案 2 :(得分: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)