如何在python中将长文本文件写入终端,以便从文件开头开始显示?

时间:2018-07-18 11:57:07

标签: python text io

我正在使用python3制作一个非常简单的电子书查看器,它将读取并显示文档,并允许用户使用上/下翻页键进行导航。与此同时,我打算播放该文档的音频记录,并调整其速度,使其与用户的阅读速度保持同步。

我遇到的麻烦是显示文件-每次游标都会一直移到末尾,要到达文件的顶部,我需要向上滚动。我查看了print()文档,那里没有任何帮助。谁能告诉我python中是否有任何允许您在终端上显示长文本以使文本从头开始显示的构造?

1 个答案:

答案 0 :(得分:1)

您可以在终端中使用pynput之类的库来读取按键事件,从而在终端中执行此操作。但是,使用已经为您完成大部分工作的GUI库要容易得多。图形用户界面(GUI)允许您选择字体和文本颜色,并根据需要自动进行文字换行等。这是使用Tkinter的Text widget的简短演示。该程序从命令行获取文件名。

import sys
import tkinter as tk

# Open the main window & start the Tcl interpreter
root = tk.Tk()

# Make a Frame to hold the Text widget and its Scrollbar
frame = tk.Frame(root)
frame.pack()

# Add the Scrollbar first so that it doesn't
# disappear when the window width is small
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# Add the Text widget
viewer = tk.Text(root, wrap="word", yscrollcommand=scrollbar.set)
viewer.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

# Connect the Scrollbar to the Text widget
scrollbar.config(command=viewer.yview)

# Get the file name from the command line
fname = sys.argv[1]

# Read the text file and add its contents to the Text widget
with open(fname) as f:
    viewer.insert(tk.END, f.read())

root.mainloop()

您可以使用滚动条浏览文件,如果单击文本,还可以使用普通的键盘命令(如PageUp,PageDown,箭头键,Ctrl-Home和Ctrl-End)进行导航。

但是,“文本”小部件是可编辑的。希望这不是问题。当然,在“文本”小部件中进行的任何更改都不会影响原始文件(除非您保存“文本”数据)。您可以禁用编辑,如Is there a way to make the Tkinter text widget read only?中所述,但是执行此操作的简单方法也将禁用所有关键命令以及复制文本的功能。