2015-07-06 2 views
2

У меня есть текстовый виджет с горизонтальной и вертикальной полосой прокрутки. Я бы хотел, чтобы вы могли прокручивать вверх и вниз в обычном режиме, и прокручивать в сторону, удерживая shift. Я не могу понять, что связать событие <Shift-MouseWheel>, или что должен быть обратный вызов. Вот фрагмент кода из MainWindow (Tk.TopLevel) 'ы __init__():Tkinter bind <Shift-MouseWheel> для горизонтальной прокрутки

# console text 
    self.yScroll = Tk.Scrollbar(self) 
    self.yScroll.pack(side=Tk.RIGHT, fill=Tk.Y) 
    self.xScroll = Tk.Scrollbar(self) 
    self.xScroll.pack(side=Tk.BOTTOM, fill=Tk.X) 
    self.log = Tk.Text(self, 
         wrap=Tk.NONE, 
         width=80, 
         height=24, 
         yscrollcommand=self.yScroll.set, 
         xscrollcommand=self.xScroll.set) 
    self.log.pack() 
    self.yScroll.config(command=self.log.yview) 
    self.xScroll.config(command=self.log.xview, orient=Tk.HORIZONTAL) 

    # shift scroll binding 
    self.bind('<Shift-MouseWheel>',) # what do I need here? 

Я успешно связала Shift-свиток простых функций печати и т.д., но я не знаю, как связать его с текстом прокрутка окна.

+0

Вы говорите, что не знаете, как вызвать команду 'xview' виджета? –

+0

более или менее ... Я не уверен, где передать событие и заставить его на самом деле прокрутить окно. Пробовал: 'self.bind ('', self.log.xview)' got: 'TclError: bad option" <экземпляр Tkinter.Event при 0x0572C1E8> ": должен быть moveto или scroll' – Aaron

+0

Если вы хотите чтобы включить регулярную горизонтальную прокрутку, или если вы получили ошибку, которую я получил с '(event.delta/120)' в качестве аргумента, хотя это все еще работает, вы можете проверить этот связанный q/a: https: // stackoverflow.com/questions/46194948/what-are-the-tkinter-events-for-horizontal-edge-scrolling-in-linux – Shule

ответ

4

Вы должны иметь связывающую называть свою собственную функцию, а затем эта функция вызовите xview_scroll метод виджета:

self.bind('<Shift-MouseWheel>', self.scrollHorizontally) 
... 

def scrollHorizontally(self, event): 
    self.log.xview_scroll((event.delta/120), "units") 

Вы, возможно, потребуется скорректировать количество единиц (или «страницы») вы хотите прокручивать с каждым щелчком колеса.

This answer имеет дополнительную информацию о различиях в платформе относительно атрибута события delta.

Смежные вопросы