- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Text
小部件的insert cursor
似乎没有很多选项(只有宽度、边框和闪烁)。为了复制命令行样式的 block 状或下划线类型的光标,我尝试从更改 insertwidth
选项开始,但它看起来并没有像我希望的那样向右扩展宽度,而是扩展了从光标中心出来:
root = Tk()
text = Text(root)
text.pack()
text.insert('1.0', 'hello world')
text.config(insertwidth=40)
mainloop()
我是否遗漏了一些简单的东西,或者这个功能是否会比更改选项更复杂?
最佳答案
所以,也许我只是为自己做了太多工作,而且我还没有找到一种非常简单的方法来做到这一点,但这是我为处理这个问题而制定的解决方案,以防其他人需要做同样的事情的东西:
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/
我发布了我的第一个网站 ( www.dirkwolthuis.nl)。这是一个包含大量图像和元素的单页网站。在我的 mac 上的 chrome 中,它加载正常并且可以滚动。在 iPad 或 iPhon
我想要一个四分之一圆形的容器,想想整个披萨的四分之一。 我如何实现这一目标?基本上我想将它放在右下角位置的另一个容器顶部,圆形部分朝内,角度当然匹配右下角形成底部容器的位置,使用堆栈小部件。 谢谢。
我刚刚发现了“blockly”,这正是我一直在寻找的将我的 webApp 提升到一个新水平的方法。我遇到的问题是我不太明白如何启动 python 或 js 代码变量。 这是我的 block : Blo
之前回答的问题似乎没有回答我的问题 "Blocky" Perlin noise 我尽量简化以使我的代码易于阅读和理解。 我不使用置换表,而是使用 mt19937 生成器。 我使用 SFML using
我正在使用 blockly 开发代码编辑器,我的页面目前有用于在 block View 和代码 View 之间切换的选项卡,有点像一些所见即所得的编辑器。现在,Blockly 已经有了很多从 bloc
我无法渲染 2d block 状 map 。 这是二维 map 数组的创建方式: map = new Block[w * h]; block 类包含 2 个变量 - 大小(H:100px、W:100p
据我所知,我已经正确嵌入了 @font-face 字体(我已经检查并仔细检查),但我在 IE8 上出现了以前从未经历过的奇怪行为。 在 IE8 上,字体会一闪而过,呈现完美,然后又变得非常 block
我是一名优秀的程序员,十分优秀!