gpt4 book ai didi

python - 有没有一种简单的方法可以为 Tkinter 文本小部件制作 block 状插入光标?

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:57 25 4
gpt4 key购买 nike

Text 小部件的insert cursor 似乎没有很多选项(只有宽度、边框和闪烁)。为了复制命令行样式的 block 状或下划线类型的光标,我尝试从更改 insertwidth 选项开始,但它看起来并没有像我希望的那样向右扩展宽度,而是扩展了从光标中心出来:

root = Tk()

text = Text(root)
text.pack()

text.insert('1.0', 'hello world')

text.config(insertwidth=40)

mainloop()

insertwidth=40

我是否遗漏了一些简单的东西,或者这个功能是否会比更改选项更复杂?

最佳答案

所以,也许我只是为自己做了太多工作,而且我还没有找到一种非常简单的方法来做到这一点,但这是我为处理这个问题而制定的解决方案,以防其他人需要做同样的事情的东西:

from Tkinter import Tk, Text
from tkFont import Font


class BlockyCursorText(Text):

def __init__(self, parent):
Text.__init__(self, parent, bg='black', fg='green', insertwidth=0,
font=Font(family='Courier', size=10))

# initialize the cursor position and the color of the cursor
self.cursor = '1.0'
self.switch = 'green'

self._blink_cursor()
self._place_cursor()


def _place_cursor(self):
'''check the position of the cursor against the last known position
every 15ms and update the cursorblock tag as needed'''

current_index = self.index('insert')

if self.cursor != current_index: # if the insertcursor moved
self.cursor = current_index # store the new index
self.tag_delete('cursorblock')# delete the cursorblock tag

start = self.index('insert') # get the start
end = self.index('insert+1c') # and stop indices

if start[0] != end[0]: # this handles an index that
self.insert(start, ' ') # reaches the end of the line
end = self.index('insert') # by inserting a space

self.tag_add('cursorblock', start, end) # add the tag back in
self.mark_set('insert', self.cursor) # move the insertcursor

self.after(15, self._place_cursor)

def _blink_cursor(self):
'''alternate the background color of the cursorblock tagged text
every 600 milliseconds'''

if self.switch == 'green':
self.switch = 'black'
else:
self.switch = 'green'

self.tag_config('cursorblock', background=self.switch)

self.after(600, self._blink_cursor)

if __name__ == '__main__':

root = Tk()

text = BlockyCursorText(root)
text.pack()
text.insert('1.0', 'hello world')

root.mainloop()

关于python - 有没有一种简单的方法可以为 Tkinter 文本小部件制作 block 状插入光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24290393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com