<p>我创建了一个简单的用户界面,允许您从文件对话框打开您选择的文本文件。出于可伸缩性的原因,我希望稍后将此选项分开设置(以防将来您希望阅读文档文件,例如):</p>
<pre><code> # Opening file options
self.file_options={}
self.file_options['defaultextension'] = '.txt'
self.file_options['filetypes'] = [('text files', '.txt'), ('all files', '.*')]
self.file_options['parent'] = self.parent
self.file_options['title'] = 'Open a text file'
self.file_options['initialdir']='/home/'
</code></pre>
<p>我运行的是Linux,所以如果您在MS Windows操作系统上,您可以将<code>self.file_options['initialdir']='/home/'</code>更改为您想要的任何目录路径。注意,您也可以删除它,在这种情况下,默认情况下,文件对话框窗口将提示您到运行应用程序的目录。在</p>
<p>方法<code>initialize_user_interface()</code>执行其名称所反映的内容。主要是,它提供了一种方便的方法,可以单击退出应用程序并选择要读取的文件:</p>
^{pr2}$
<p>然后可以添加一个文本小部件。最好是有一个可滚动的文本区域,以防您偶然发现一个大的内容文件。在</p>
<p>为此,您需要创建滚动条,并将其附加到文本小部件,因为文本小部件不维护自己的滚动条。在</p>
<p><strong>这是完整的程序:</strong></p>
<pre><code>'''
Created on Feb 25, 2016
@author: begueradj
'''
import Tkinter # Tkinter -> tkinter in Python3
import Tkconstants
import tkFileDialog
class Begueradj(Tkinter.Frame):
""" Get text file content and past it into a scrollable Text widget.
Replace the content of the file with the pre-existing Text widget content.
"""
def __init__(self,parent):
""" Set some class variables:
mainly the file dialog interface options.
"""
Tkinter.Frame.__init__(self,parent)
self.parent=parent
# Opening file options
self.file_options={}
self.file_options['defaultextension'] = '.txt'
self.file_options['filetypes'] = [('text files', '.txt'), ('all files', '.*')]
self.file_options['parent'] = self.parent
self.file_options['title'] = 'Open a text file'
self.file_options['initialdir']='/home/'
self.initialize_user_interface()
def initialize_user_interface(self):
""" Design of the user interface.
It mainly consists of a bar menu and a horizontally & vertically
scrollable Text widget in case the text file to read is large.
"""
self.parent.title("Text replacement")
# Set the bar menu and its items
self.menubar=Tkinter.Menu(self.parent)
self.filemenu=Tkinter.Menu(self.menubar,tearoff=0)
self.filemenu.add_command(label="Open",command=self.text_replacement)
self.filemenu.add_command(label="Exit",command=self.parent.quit)
self.menubar.add_cascade(label="File",menu=self.filemenu)
self.parent.config(menu=self.menubar)
self.parent.grid_rowconfigure(0,weight=1)
self.parent.grid_columnconfigure(0,weight=1)
# Set the horizontal and vertical scrollbars
self.hscrollbar=Tkinter.Scrollbar(self.parent,orient=Tkconstants.HORIZONTAL)
self.hscrollbar.grid(row=1,column=0,sticky=Tkinter.E+Tkinter.W)
self.vscrollbar=Tkinter.Scrollbar(self.parent)
self.vscrollbar.grid(row=0,column=1,sticky=Tkinter.N+Tkinter.S)
# Set the Text widget and make it scrollable
self.text=Tkinter.Text(self.parent,wrap=Tkinter.NONE,bd=0,
xscrollcommand=self.hscrollbar.set,
yscrollcommand=self.vscrollbar.set)
self.text.grid(row=0,column=0,sticky=Tkinter.E+Tkinter.W+Tkinter.S+Tkinter.N)
self.text.insert("1.0","Original text here")
self.hscrollbar.config(command=self.text.xview)
self.vscrollbar.config(command=self.text.yview)
def text_replacement(self):
""" Return the name of a file
opened in read mode
"""
self.filename = tkFileDialog.askopenfilename(**self.file_options)
if self.filename:
self.original=self.text.get("0.0","end-1c")
print self.original
with open(self.filename) as self.filetoread:
self.txtfilecontent=self.filetoread.read()
self.filetoread.close()
self.text.delete("1.0", Tkinter.END) # Erase the previous Text widget content
self.text.insert("1.0", self.txtfilecontent)
with open(self.filename,'w') as self.filetowrite:
self.filetowrite.write(self.original)
self.filetowrite.close()
def main():
""" Main method to be executed.
Instantiate Begueradj class
"""
root=Tkinter.Tk()
b=Begueradj(root)
root.geometry("300x250+300+300")
root.mainloop()
if __name__=="__main__":
""" Run the application
"""
main()
</code></pre>
<p><strong>应用程序演示:</strong></p>
<p>演示包括3个屏幕截图,显示:</p>
<ol>
<li>将原始文本设置为文本小部件和一个文件对话框窗口,以拾取要读取的文件。在</li>
<li>正在将<code>file1.txt</code>的内容加载到<code>Tkinter.Text</code>小部件中</li>
<li><p>检查文本小部件的原始文件是否保存(替换)在<code>file1.txt</code></p>
<ul>
<li><a href="https://i.stack.imgur.com/TlgbP.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/TlgbP.png" alt="Choosing the file to read"/></a></li>
<li><a href="https://i.stack.imgur.com/Gck8Z.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Gck8Z.png" alt="Text replacement"/></a></li>
<li><a href="https://i.stack.imgur.com/Oofup.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Oofup.png" alt="enter image description here"/></a></li>
</ul></li>
</ol>