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

Python 完全禁用GTK webkit webview上的滚动条?,python,webkit,gtk,pygtk,webkitgtk,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

我想要一个基于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.scrolled窗口作为WebKit.WebView的容器。如果你不想要一个滚动条,只需要把它放在一个没有实现Gtk.Scrollable的容器中,比如说Gtk.Grid。它根本不会显示滚动条。有几个缺点:

  • 主窗口的大小不会超过其内容的最小宽度和高度
  • 如果您的视图内容更改了大小,并且会更改(除非您限制视图显示方式的最后一个细节),则窗口也将遵循当前大小
  • 在WebKit.WebView小部件中,没有Gtk.widget.set_size_请求这样的东西,它会 仍然关注它的内容。顺便说一下,Gtk.Widget.set_default_size()不会为小部件创建固定大小,只会在第一次显示小部件时设置大小

  • 我试着和信号处理器一起玩,但没用

    浏览GTK文档时,我看到了ScrolledWindow的两个样式属性,这两个属性在以前的样式中没有包括(
    scrollbar spacing
    scrollbar Inframe
    )。因此,最终代码(不写
    ~/.gtkrc-2.0
    )现在是:


    虽然不是很优雅,但这对我来说很有用,因为我不关心整个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)
    

    滚动条是否来自WebView,而不是滚动窗口?看一看这张照片。尽管如此,defaultWebKit确实指出这是
    False
    ,它允许显示的页面覆盖您在滚动窗口上设置的滚动条策略。这是讨论过的-一开始并不直观,但他们对此进行了解释。@ptomato尝试添加以下内容,但没有按照广告中的方式工作:
    def sig_handler(*args):return True frame=view.get_main_frame()handler_id=frame.connect('scrollbars-policy-changed',sig_handler)
    很高兴知道这是webkit行为,而不是通用的gtk.1。这正是我所需要的,以切断不适合webview的内容,2。视图必须保持在固定的几何图形3上。如果启用了滚动条,则不会调整窗口的大小,因此对于meWelcome to so!来说,初始默认大小似乎正常!。想解释一下吗?
    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)