【问题标题】:Tkinter bind <Shift-MouseWheel> to horizontal scrollTkinter 将 <Shift-MouseWheel> 绑定到水平滚动
【发布时间】:2015-09-24 02:58:46
【问题描述】:

我有一个带有水平和垂直滚动条的文本小部件。我希望能够正常上下滚动,并在按住 shift 的同时左右滚动。我不知道将&lt;Shift-MouseWheel&gt; 事件绑定到什么,或者回调应该是什么。这是mainWindow(Tk.TopLevel)的__init__():的代码sn-p

    # 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-scroll 绑定到简单的打印功能等,但我不确定如何将其绑定到文本框滚动。

【问题讨论】:

  • 你是说你不知道怎么调用widget的xview命令?
  • 或多或少...我不确定在哪里传递事件并使其实际滚动窗口。试过了:self.bind('&lt;Shift-MouseWheel&gt;', self.log.xview) 得到了:TclError: bad option "&lt;Tkinter.Event instance at 0x0572C1E8&gt;": must be moveto or scroll
  • 如果您也想启用常规水平滚动,或者如果您收到我使用(event.delta/120) 作为参数时遇到的错误,即使这仍然有效,您可以查看这个相关的 q/a :stackoverflow.com/questions/46194948/…

标签: python user-interface events scroll tkinter


【解决方案1】:

您需要让绑定调用您自己的函数,然后让该函数调用小部件的xview_scroll 方法:

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

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

您可能需要调整每次单击滚轮时要滚动的单元数(或“页数”)。

This answer 有关于事件的delta 属性的平台差异的更多信息。

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 2021-12-26
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多