我正在創建一個代碼編輯器作為我的專案,我認為在選項卡下有垂直線很好,這樣編碼器更容易。我想在標簽下方畫一條垂直線(我認為下面的圖片會更好地理解我想要的,只是vs代碼的截圖):
在這里你可以看到下面有一條垂直線def
,我認為這些對我來說非常有用,這樣我在編碼時就不會出現任何縮進錯誤。現在我想要在我的代碼編輯器中完全擁有這樣的功能。為了簡化事情,我將在下面上傳示例代碼。
from tkinter import *
root = Tk()
txt = Text(root) # What changes do I have to make to this text widget so the lines appear like it does in the image
txt.pack()
root.mainloop()
uj5u.com熱心網友回復:
文本小部件不直接支持這一點。您可以使用 ascii 線條繪圖字符來偽造它,但這可能需要大量作業。不過應該是可行的。
如果您的 IDE 基于畫布而不是文本小部件,則可以這樣做,但與文本小部件相比,畫布文本項的文本編輯能力會非常麻煩。
話雖如此,只要有一點創造力,您就可以通過標簽獲得接近您想要的東西。這個想法是為要顯示為一行的字符添加一個標簽。如果您將標簽設定為與文本不同的顏色,它將看起來像一條垂直線。然而,問題是您對線的寬度沒有太多控制。使用該選項可能會有一些運氣bgstipple
,它允許您將位圖應用于該區域。
這是一個例子來說明這個想法。
import tkinter as tk
import tempfile
def add_markup(text, start=None, end="end"):
text.mark_set("current", start or "1.0")
text.tag_remove("markup", "current", end)
while text.compare("current", "<", end):
if text.get("current") == " ":
text.tag_add("markup", "current", "current 1c")
text.mark_set("current", "current 4c")
else:
text.mark_set("current", f"current 1l linestart")
root = tk.Tk()
text = tk.Text(root)
text.tag_configure("markup", background='#f0f0f0', bgstipple='@line.xbm', fgstipple='@line.xbm')
text.pack(fill="both", expand=True)
text.bind(
"<Any-KeyRelease>",
lambda event: add_markup(event.widget, "insert linestart", "insert lineend")
)
def load_this_file(text):
with open(__file__, "r") as f:
text.insert("1.0", f.read())
load_this_file(text)
add_markup(text)
root.mainloop()
這是它在我的機器上的樣子:
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/524654.html
標籤:Pythonpython-3.xtkinter标签tkinter-text
下一篇:映射字串陣列并將它們分配給輸入