#python #event-handling #tkinter #mouseevent #mousewheel
#python #обработка событий #tkinter #mouseevent #колесо мыши
Вопрос:
В Tkinter как сохранить вставку текста на экране (в текстовом виджете) при прокрутке текстового виджета с помощью колеса мыши?
Комментарии:
1. Если вам интересно, для чего нужны отрицательные голоса, они, вероятно, из-за недопонимания (они думали, что мой ответ был частью моего вопроса, и они думали, что он не отвечает на вопрос по какой-то неизвестной причине, но оба убеждения совершенно ложны).
Ответ №1:
Вот пример ответа на вопрос в коде. Это не часть вопроса. Это ответ. Я уверен, что есть больше способов ответить на этот вопрос (вот почему я написал ответ «пример»).
from tkinter import *
…
def create_widgets(self):
…
self.textWidget.bind("<MouseWheel>", self.mouse_wheel) #Windows mouse wheel
self.textWidget.bind("<Button-4>", self.mouse_wheel) #Linux mouse wheel
self.textWidget.bind("<Button-5>", self.mouse_wheel) #Linux mouse wheel (one is for scrolling up and one is for scrolling down, in Linux)
def mouse_wheel(self, event):
self.textWidget.mark_set(INSERT, "current display linestart") #display makes it uses display lines (as in when word wrap is on in case you have a line that spans a lot of 'display' lines)
#Don't add return "break" here unless you want to write the entire mouse wheel functionality yourself.
Этот код используется mark_set
для размещения вставки в "current display linestart"
(которая является началом строки, где находится указатель мыши). mouse_wheel
Метод вызывается при прокрутке колеса мыши. Это кроссплатформенное решение, поскольку оно предоставляет способ сделать это как в Linux, так и в других системах (например, Windows).
Комментарии:
1. Ответ на самом деле отвечает на вопрос и должен был ответить на вопрос. Единственная причина, по которой я задал вопрос, заключалась в том, чтобы ответить на него этим ответом (не потому, что мне нужно было знать). Ответ не является критикой. И это не разъяснение вопроса. Это работает и является проверенным кодом.
2. Я отредактировал ответ, чтобы сделать более очевидным, что код является ответом, а не частью вопроса, и объяснил, как он отвечает на вопрос позже.