具有“编程”输入功能的 Python 文本编辑器

我需要一个文本编辑器,作为一项功能,它必须能够在打开时更改它在屏幕上显示的某些信息。


例如,我使用上面提到的文本编辑器打开文本文件,我可以在屏幕上看到:


|--------------------------------------------------------|

|          My Text Editor (C:\myfile.txt)    [Button]    |

|--------------------------------------------------------|

|Name: John                                              |

|Age: 32                                                 |

|Gender: Male                                            |

|                                                        | 

|                                                        |

然后,例如,如果我点击按钮[Button],我希望在打开文本文件时将年龄 32 更改为 30。


但我想在不使用键盘和鼠标自动化的情况下做到这一点......


那可能吗?Tkinter 足以完成这项任务吗?


元芳怎么了
浏览 141回答 2
2回答

慕尼黑的夜晚无繁华

这是一个人为的例子,它都有一个改变年龄的按钮,并且每秒都会更新一次时间。它使用上下文管理器执行此操作,该管理器保留插入光标,然后插入或删除您想要的任何文本。这不是特别好的编码风格,但它显示了 tkinter 可以用它的文本小部件做什么。import tkinter as tkfrom datetime import datetimefrom contextlib import contextmanager@contextmanagerdef preserve_insert_cursor(text):    """Performs an action without changing the insertion cursor location"""    saved_insert = text.index("insert")    yield    text.mark_set("insert", saved_insert)def change_age():    """Change the age on line 3"""    with preserve_insert_cursor(text):        text.delete("3.5", "3.0 lineend")        text.insert("3.5", "30")def update_time():    with preserve_insert_cursor(text):        # find all ranges of text tagged with "time" and replace        # them with the current time        now = datetime.now()        timestring = now.strftime("%H:%M:%S")        ranges = list(text.tag_ranges("time"))        while ranges:            start = ranges.pop(0)            end = ranges.pop(0)            text.delete(start, end)            text.insert(start, timestring, "time")    # call this function again in a second    text.after(1000, update_time)root = tk.Tk()header = tk.Frame(root, bd=1, relief="raised")text = tk.Text(root)header.pack(side="top", fill="x")text.pack(fill="both", expand=True)button = tk.Button(header, text="Button", command=change_age)button.pack(side="right", padx=10)# insert "Time:" with no tags, "<time>" with the tag "time",# and then a newline with no tagstext.insert("end", "Time: ", "", "<time>", "time", "\n")text.insert("end", "Name: John\n")text.insert("end", "Age: 32\n")text.insert("end", "Gender: Male\n")update_time()root.mainloop()您无法从静态屏幕截图中分辨出来,但如果您运行代码,您会看到时间会实时更新,即使您正在键入。

三国纷争

我认为,实现此目的的最佳方法是采用 PyQT 的简单 TextEditor 示例并添加一个按钮来执行您想要的操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python