为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2023-06-06 10:28:24
我需要一个文本编辑器,作为一项功能,它必须能够在打开时更改它在屏幕上显示的某些信息。例如,我使用上面提到的文本编辑器打开文本文件,我可以在屏幕上看到:|--------------------------------------------------------||          My Text Editor (C:\myfile.txt)    [Button]    ||--------------------------------------------------------||Name: John                                              ||Age: 32                                                 ||Gender: Male                                            ||                                                        | |                                                        |然后,例如,如果我点击按钮[Button],我希望在打开文本文件时将年龄 32 更改为 30。但我想在不使用键盘和鼠标自动化的情况下做到这一点......那可能吗?Tkinter 足以完成这项任务吗?
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这是一个人为的例子,它都有一个改变年龄的按钮,并且每秒都会更新一次时间。

它使用上下文管理器执行此操作,该管理器保留插入光标,然后插入或删除您想要的任何文本。这不是特别好的编码风格,但它显示了 tkinter 可以用它的文本小部件做什么。

import tkinter as tk

from datetime import datetime

from contextlib import contextmanager


@contextmanager

def 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 tags

text.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()

您无法从静态屏幕截图中分辨出来,但如果您运行代码,您会看到时间会实时更新,即使您正在键入。

//img4.sycdn.imooc.com/647e99e90001d88905450348.jpg

查看完整回答
反对 回复 2023-06-06
?
三国纷争

TA贡献1804条经验 获得超7个赞

我认为,实现此目的的最佳方法是采用 PyQT 的简单 TextEditor 示例并添加一个按钮来执行您想要的操作。

查看完整回答
反对 回复 2023-06-06
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信