如何在 python 中的 tkinter gui 中的冒号后添加自动缩进功能?
how can I add an auto indent feature after colon in tkinter gui in python?
我正在制作一个 文本编辑器 它具有所有功能,但没有 自动缩进 功能 在循环或条件 之后自动添加 spaces。请告诉我如何制作,并请尝试提供可以执行此操作的代码。我在 Tkinter 中制作它并希望在文本小部件中使用此功能。我做了这个文本编辑器。
我用 Tkinter 做了这个所以请帮我提供一个自动缩进的代码。我曾尝试在用户按下 ':' 按钮以在下一行缩进时触发事件,但它不遵循多级缩进的模式。喜欢
for i in range(100):
if i==5:
break
else:
print('got till '+str(i))
但是我的代码不是这样的,它只在第一行添加了 space,所以代码看起来像这样。
for i in range(100):
if i==5:
break
else:
print('got till '+str(i))
所以有点棘手。请评论任何相关信息或问题,但请回答我。
您只需要从当前行获取缩进并添加新的缩进级别。
这是一个完整的工作示例:
import tkinter as tk
import re
root = tk.Tk()
text = tk.Text(root)
text.pack(fill="both", expand=True)
def autoindent(event):
# the text widget that received the event
widget = event.widget
# get current line
line = widget.get("insert linestart", "insert lineend")
# compute the indentation of the current line
match = re.match(r'^(\s+)', line)
current_indent = len(match.group(0)) if match else 0
# compute the new indentation
new_indent = current_indent + 4
# insert the character that triggered the event,
# a newline, and then new indentation
widget.insert("insert", event.char + "\n" + " "*new_indent)
# return 'break' to prevent the default behavior
return "break"
text.bind(":", autoindent)
root.mainloop()
我正在制作一个 文本编辑器 它具有所有功能,但没有 自动缩进 功能 在循环或条件 之后自动添加 spaces。请告诉我如何制作,并请尝试提供可以执行此操作的代码。我在 Tkinter 中制作它并希望在文本小部件中使用此功能。我做了这个文本编辑器。
我用 Tkinter 做了这个所以请帮我提供一个自动缩进的代码。我曾尝试在用户按下 ':' 按钮以在下一行缩进时触发事件,但它不遵循多级缩进的模式。喜欢
for i in range(100):
if i==5:
break
else:
print('got till '+str(i))
但是我的代码不是这样的,它只在第一行添加了 space,所以代码看起来像这样。
for i in range(100):
if i==5:
break
else:
print('got till '+str(i))
所以有点棘手。请评论任何相关信息或问题,但请回答我。
您只需要从当前行获取缩进并添加新的缩进级别。
这是一个完整的工作示例:
import tkinter as tk
import re
root = tk.Tk()
text = tk.Text(root)
text.pack(fill="both", expand=True)
def autoindent(event):
# the text widget that received the event
widget = event.widget
# get current line
line = widget.get("insert linestart", "insert lineend")
# compute the indentation of the current line
match = re.match(r'^(\s+)', line)
current_indent = len(match.group(0)) if match else 0
# compute the new indentation
new_indent = current_indent + 4
# insert the character that triggered the event,
# a newline, and then new indentation
widget.insert("insert", event.char + "\n" + " "*new_indent)
# return 'break' to prevent the default behavior
return "break"
text.bind(":", autoindent)
root.mainloop()