gpt4 book ai didi

Python GTK3 Evince 查看器 - 如何重新加载文档?

转载 作者:行者123 更新时间:2023-11-28 23:01:29 24 4
gpt4 key购买 nike

这是来自 here 的跟进.我正在尝试重新加载 pdf 文件。基本上我想看 pdf 文件,当它发生变化时,在查看器中重新加载它。我找不到 python+gtk3 和 evince 的任何文档。

#!/usr/bin/env python

from gi.repository import Gtk, Gdk
from gi.repository import EvinceDocument
from gi.repository import EvinceView
import os,sys

if (len(sys.argv) is not 2):
print "Usage: "+sys.argv[0]+" file.ext"
sys.exit(0)
else:
docFile=os.path.abspath(sys.argv[1])

#==========================================================
# Evince viewer class
class EvinceViewer:

#------------------------------------------------------
# constructor to build GUI and hook up function
def __init__(self):

# create main window
self.window = Gtk.Window()
# set title, size, position
self.window.set_title("Evince")
self.window.set_default_size(800,600)
# connect destroy and delete events to quit
self.window.connect('destroy', Gtk.main_quit)
self.window.connect('delete-event',
Gtk.main_quit)
self.window.connect("key-press-event",
self.keypress)

# scrolled window for the viewer
scroll = Gtk.ScrolledWindow()
self.window.add(scroll)

# evince document
EvinceDocument.init()
doc = EvinceDocument.Document.factory_get_document(
'file://'+docFile)
# evince view
self.view = EvinceView.View()
# evince model
self.model = EvinceView.DocumentModel()
self.model.set_document(doc)
self.view.set_model(self.model)

# add to scroll window
scroll.add(self.view)
self.window.show_all()
self.fullscreen=False

#------------------------------------------------------
# handling keyboard events
def keypress(self,widget,event):
keyname = Gdk.keyval_name(event.keyval)
ctrl = event.state & \
Gdk.ModifierType.CONTROL_MASK

if ctrl:

if keyname=='r':
self.view.reload()

elif keyname == 'Return':
if self.fullscreen == False:
self.fullscreen=True
self.window.fullscreen()
else:
self.fullscreen=False
self.window.unfullscreen()

elif keyname=='q':
Gtk.main_quit()

def main(self):
Gtk.main()

if __name__ == "__main__":
evinceViewer = EvinceViewer()
evinceViewer.main()

重新加载功能似乎无法完成这项工作。出了什么问题?调用它时,文档查看器会显示一个乱七八糟的 pdf 文件版本。

最佳答案

根据 http://git.gnome.org/browse/evince/tree/libview/ev-view.c , ev_view_reloadev_view_reload_page 只重绘页面;他们没有完成重新阅读文档。在您的情况下,如果您在不让库知道的情况下更改文件,它将假定文件没有更改并尝试使用内存中的引用表来呈现文档,从而导致其行为不正常。如果更改文档,则必须重新加载文档本身。

为此(第 63-64 行):

if keyname=='r':
self.model.get_document().load('file://'+docFile) # <- ADD THIS LINE
self.view.reload()

这实际上会导致库完全重新读取 PDF 文件的内容。

关于Python GTK3 Evince 查看器 - 如何重新加载文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com