如何完全禁用GTK webkit webview中的滚动条?
我想要一个简单的基于webkit的网页视图,大小固定(比如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
以下内容对我有效
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)
0
好吧,事情是这样的。你不想要滚动条,但你却用 Gtk.ScrolledWindow 来装 WebKit.WebView。如果你不想要滚动条,那就把它放在一个不支持 Gtk.Scrollable 的容器里,比如 Gtk.Grid。这样就完全不会显示滚动条了。不过有几个缺点:
- 你的主窗口的大小不会小于它内容的最小宽度和高度。
- 如果你的视图内容改变了大小,而它肯定会改变(除非你对视图的显示方式限制得非常严格),窗口的大小也会跟着变化。
- 在 WebKit.WebView 这个小部件里,没有 Gtk.Widget.set_size_request 这个功能,它仍然会根据内容来调整大小。顺便说一下,Gtk.Widget.set_default_size() 并不会给小部件设置固定大小,它只是设置了小部件第一次显示时的大小。
1
我尝试调整信号处理程序,但没有成功。
在查看GTK的文档时,我发现了ScrolledWindow的两个样式属性,这两个属性我之前没有包含在样式中(scrollbar-spacing
和scrollbar-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会话中的滚动条。