Gibt es eine einfache Möglichkeit, einen blockigen Insert-Cursor für das Tkinter Text-Widget zu machen?

Der insert cursor des Text Widgets scheint nicht viele Optionen zu haben (nur Breite, Rand und Blinken). Um einen Befehlszeilen-Stil Blocky oder Unterstrich-Typ-Cursor zu replizieren, habe ich versucht, durch die Änderung der insertwidth Option zu starten, aber es sieht aus wie anstelle der Erweiterung der Breite nach rechts, wie ich hoffte, es erweitert sich aus der Mitte des Cursors :

 root = Tk() text = Text(root) text.pack() text.insert('1.0', 'hello world') text.config(insertwidth=40) mainloop() 

Einfügung = 40

Gibt es etwas einfaches, das ich vermisse, oder ist diese Funktionalität komplexer als das Ändern einer Option?

One Solution collect form web for “Gibt es eine einfache Möglichkeit, einen blockigen Insert-Cursor für das Tkinter Text-Widget zu machen?”

Also, vielleicht habe ich nur zu viel Arbeit für mich gemacht und es gibt einen wirklich einfachen Weg, dies zu tun, dass ich nicht gefunden habe, aber hier ist die Lösung, die ich gemacht habe, um dies zu behandeln, falls jemand anderes muss die gleiche Art von Dingen zu tun:

 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() 
  • Tkinter: "Python darf nicht für Tk konfiguriert werden"
  • Der Auswahlbereich wird in Tkinter nicht angezeigt
  • Py2exe mit Tkinter
  • Anaconda python, PIL und Imagingtk
  • Rückgabe eines Wertes nach Aufruf einer Funktion mit einer Schaltfläche in Tkinter
  • Tkinter GUI: Auswahl eines Optionsmenüs je nach Wahl aus einem anderen Optionsmenü [Duplizieren]
  • So erstellen Sie eine Baumansicht mit Kontrollkästchen in Python
  • Reihenfolge der Artikel im tkinter listbox ändern
  • Menüoptionen mit Checkbutton in Tkinter einrichten?
  • Wie zentriere ich einen Rahmen in einem Rahmen in Tkinter?
  • Tkinter Label Hintergrund?
  • Python ist die beste Programmiersprache der Welt.