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



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

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

任何想法?

事情是这样的。你不想要一个滚动条,但是你构造了一个Gtk。ScrolledWindow是WebKit.WebView的容器。如果不想要滚动条,只需将其放入不实现Gtk的容器中即可。可滚动的,比如gtk。grid。它根本不会显示滚动条。缺点:

  1. 你的主窗口不会缩小超过它的内容的最小宽度和高度。
  2. 如果你的视图内容改变了大小,它会(除非你限制了你的视图将如何显示的每一个细节),窗口也将遵循当前的大小
  3. 在WebKit。WebView widget,没有gtk。widget这样的东西。Set_size_request,它会仍然遵循它的内容。顺便说一下,gtk。widget。set_default_size()不会为小部件创建一个固定的大小,只在它第一次显示时设置大小。

我试着玩信号处理程序,但它没有工作。

通过GTK文档,我看到了滚动窗口的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会话中的滚动条。

以下内容适合我

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)

最新更新