Python: прокрутка колесиком мыши в текстовом поле, когда курсор мыши не находится в текстовом поле (tkinter)

Я создал текстовое поле в графическом интерфейсе, в котором прокрутка колесика мыши работает, когда курсор мыши находится на виджете текстового поля. Я хочу иметь возможность сделать это, когда курсор мыши не находится в виджете текстового поля. У меня есть несколько ярлыков с наведением мыши на события. Иногда текст слишком длинный для всего виджета текстового поля, а это означает, что мне приходится прокручивать вниз, пока курсор мыши находится на моей метке. Причина этого в том, что текст удаляется, когда курсор мыши больше не находится на метке, поэтому прокрутка должна выполняться, пока она находится на метке.

def mousewheel(event):
        textbox.yview_scroll(-1*(event.delta/120), "units")

textbox = Text(ctr_mid, height=30, width=60, font="Arial")
    textbox.grid(row=6,sticky=S)
    textbox.bind_all("<MouseWheel>", mousewheel)

Я искал решения в Интернете и нашел функцию мышиного колеса в Интернете, но при попытке выполнить ее я получаю эту ошибку:

Traceback (most recent call last):   
  File "C:\Users\Homie\AppData\Local\Programs\Python\Python36-   
 32\lib\tkinter\__init__.py", line 1699, in __call__  
    return self.func(*args)  
  File "C:\Users\Homie\PycharmProjects\bluescreen\Game.py", line 402, in   
mousewheel  
self.textbox.xview_scroll(-1*(event.delta / 120), "units")  
  File "C:\Users\Homie\AppData\Local\Programs\Python\Python36-
32\lib\tkinter\__init__.py", line 1724, in xview_scroll  
self.tk.call(self._w, 'xview', 'scroll', number, what)  
_tkinter.TclError: expected integer but got "1.0"  

Это мой первый пост здесь, поэтому прошу прощения, если допустил какие-то ошибки.


person Chris    schedule 11.12.2017    source источник
comment
Просто bind_all в корневой (tk.Tk) виджет.   -  person Daniel    schedule 12.12.2017
comment
Я сделал это, однако я все еще получаю _tkinter.TclError: ожидаемое целое число, но получил ошибку 1.0. Я попытался изменить bind_all на bind. Я не получил ошибку, но прокрутка не работала.   -  person Chris    schedule 12.12.2017
comment
Хорошо, какой номер строки? Вы включили это в вопрос?   -  person Daniel    schedule 12.12.2017
comment
Если вы имеете в виду, какая строка отвечает за ошибку, это строка textbox.yview_scroll.... Это тоже часть ошибки. Файл C:\Users\Homie\AppData\Local\Programs\Python\Python36-32\lib\tkinter_init_.py, строка 1724, в xview_scroll self.tk.call(self._w, ' xview', 'прокрутка', число, что)   -  person Chris    schedule 12.12.2017
comment
Пожалуйста, отредактируйте свой вопрос, чтобы включить полную трассировку.   -  person Daniel    schedule 12.12.2017
comment
Сделанный. Надеюсь, это полезно.   -  person Chris    schedule 12.12.2017
comment
по ошибке у вас есть expected integer but got "1.0", поэтому используйте print(), чтобы проверить все переменные и посмотреть, какая из них имеет "1.0"   -  person furas    schedule 12.12.2017
comment
Попробуйте textbox.yview_scroll(int(-1*(event.delta/120)), "units") или добавьте минимальный пример, который воспроизводит ту же ошибку, в новом вопросе.   -  person Nae    schedule 12.12.2017
comment
Это решило проблему. Большое тебе спасибо!   -  person Chris    schedule 12.12.2017
comment
@Coal_ Пожалуйста, ответьте на вопрос своим первым комментарием.   -  person Nae    schedule 12.12.2017


Ответы (1)


Я тоже новичок и это мой первый пост. Но у меня была такая же ошибка, и я решил ее довольно легко.

Сообщение об ошибке, которое вы разместили, говорит, что оно ожидало целое число, но получило что-то другое, число с плавающей запятой ("1.0"). Поэтому вам нужно убедиться, что результат «-1 * (event.delta/120)» является целым числом, а не числом с плавающей запятой. Таким образом, ваш новый код для вашей функции колесика мыши будет выглядеть так:

def mousewheel(event):
    textbox.yview_scroll(int(-1*(event.delta/120)), "units")
person Ha Skrundee Da Pat Sleemo    schedule 15.02.2018