python-3.x - python - 如何在python的tkinter gui中的冒号后添加自动缩进功能?
问题描述
我正在制作一个文本编辑器,它具有所有功能,但没有自动缩进功能,它可以在循环或条件之后自动添加空格。请告诉我我该怎么做,并请尝试给出一个可以做到的代码。我在 Tkinter 中制作这个,并希望在文本小部件中使用这个功能。我做了这个文本编辑器。
我是在 Tkinter 中制作的,所以请帮我提供一个自动缩进的代码。每当用户按下“:”按钮以在下一行中缩进时,我都尝试触发事件,但它不遵循多级缩进的模式。像
for i in range(100):
if i==5:
break
else:
print('got till '+str(i))
但是我的代码并没有像这样遵循它,它只在第一行添加了空格,所以代码看起来像。
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()
推荐阅读
- optimization - Pyomo:如何在不声明名称的情况下创建新的模型变量,然后将其存储在字典中?
- javascript - 我创建了一个反应原生应用程序,并且每次都必须刷新我的屏幕才能从 firebase 获取新添加的数据。我正在使用钩子
- anova - 例如,运行 ezANOVA 时出错:找不到函数“ezANOVA”
- bootstrap-4 - 从引导程序 4 卡中删除额外空间
- android - FirebaseUser 在 Android (JAVA) 中为 Facebook 个人资料的电话号码提供了错误的图像和空值
- ios - 更改视图会导致音频引擎出现故障
- c - 如何转置数组但不改变c中的行数和列数?
- swiftui - SwiftUI - 从 UserDefaults 访问数据时选择器值不会改变
- laravel - 未找到此相关模块:* ./src/main.js in multi ./src/main.js
- asp.net-core - 如何使用 xUnit 为使用 Entity Framework Core 和 Simple Injector 构建的 Asp.NetCore WebAPI 构建测试?