当前位置: 首页 > 面试题库 >

一起滚动多个Tkinter列表框

曹鸿风
2023-03-14
问题内容

我有多个Tkinter列表框,可以使用单个滚动条一起滚动,但是我也希望它们一起滚动,以便在任何列表框上进行鼠标滚轮活动。

这该怎么做?

我当前的代码基于此处讨论的最后一个模式:http :
//effbot.org/tkinterbook/listbox.htm
仅使用滚动条时,它可以很好地工作,但是使用鼠标滚轮时,列表框可​​以独立地滚动。


问题答案:

解决问题的方法与将两个小部件连接到单个滚动条的方法几乎相同:为鼠标滚轮创建自定义绑定,并使这些绑定影响两个列表框,而不只是一个列表框。

唯一真正的窍门是,您会根据平台在鼠标滚轮上获得不同的事件:Windows和Mac获取<MouseWheel>事件,Linux获取<Button-4><Button-5>事件。

这是一个示例,在我的Mac上使用python 2.5进行了测试:

import Tkinter as tk

class App:
    def __init__(self):
        self.root=tk.Tk()
        self.vsb = tk.Scrollbar(orient="vertical", command=self.OnVsb)
        self.lb1 = tk.Listbox(self.root, yscrollcommand=self.vsb.set)
        self.lb2 = tk.Listbox(self.root, yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right",fill="y")
        self.lb1.pack(side="left",fill="x", expand=True)
        self.lb2.pack(side="left",fill="x", expand=True)
        self.lb1.bind("<MouseWheel>", self.OnMouseWheel)
        self.lb2.bind("<MouseWheel>", self.OnMouseWheel)
        for i in range(100):
            self.lb1.insert("end","item %s" % i)
            self.lb2.insert("end","item %s" % i)
        self.root.mainloop()

    def OnVsb(self, *args):
        self.lb1.yview(*args)
        self.lb2.yview(*args)

    def OnMouseWheel(self, event):
        self.lb1.yview("scroll", event.delta,"units")
        self.lb2.yview("scroll",event.delta,"units")
        # this prevents default bindings from firing, which
        # would end up scrolling the widget twice
        return "break"

app=App()


 类似资料:
  • 问题内容: 您可以将多个表单序列化为一个表单,以便仅发出一个post或ajax请求吗?我已经搜索过了,全部都是通过post / ajax明显地提交每个表单。 问题答案: 当您使用jQuery 函数时,它只是将您的表单转换为format的字符串。因此,您当然可以将此函数应用于两种形式,并在两者之间连接一个结果,然后在ajax调用中使用结果。您希望进行一些检查以确保在进行串联时两个字符串都不为空。

  • 你好,伙计们,我想使我的列表视图这样,一个项目滚动一次和平滑。这里是我尝试到目前为止,但没有运气:(请帮助和感谢提前 自定义ListView类 }

  • 问题内容: 我有两个ListView要滚动在一起的对象。它们 并排放置,因此,如果一个滚动一定数量,则另一个滚动相同 数量。我已经找到了一些有关如何执行此操作的示例,但我相信它们 依赖于ListView高度相同的项目(如果我 错了,请纠正我)。我的一个ListView对象中的项目比另一个对象中的项目高 ,跨越2-3个项目。 如何将这两个对象“锁定”在一起? 编辑:这是我所拥有的屏幕截图,也许它将更

  • 问题内容: 我希望在Tkinter中创建类似于表的内容,但不一定必须是一个表。 我想例如创建标题“ Name1”,“ Name2”,“ Value”,并且在每个标题下方我希望有几行空白。 然后,我希望稍后使用我计算出的值或名称的字符串值填写这些行(因此称为Label)。 对于“ Name2”,我实际上希望整个列都为一个下拉菜单。我已经自己创建了一个代码,但不确定如何将其合并到此“表”中。 例如,是

  • 问题内容: 在Python模块中,和用于分别标识左,中和右按钮的鼠标单击。 同样,用于返回键的按下。 在哪里可以找到所有此类事件的列表,包括各种键盘键的名称? Tcl绑定手册没有那些。 问题答案: 可以在effbot.org或New Mexico Tech提供 的文档中找到有关绑定和事件的常规列表,而此处除了原始文档之外,还列出了几个键的名称。 以下是最常见事件的摘要,并解释了一些按键名称:

  • 问题内容: 我的目标是向具有多个标签的框架添加垂直滚动条。一旦框架内的标签超过框架的高度,滚动条应自动启用。搜索之后,我发现了这个有用的帖子。根据该帖子,我了解到要实现我想要的功能(如果我错了,请纠正我,我是一个初学者),我必须先创建一个,然后在该框架内创建一个并将滚动条粘贴到该框架上好。之后,创建另一个框架并将其作为窗口对象放在画布内。所以,我终于想出了这个: 我做对了吗?有没有更好/更聪明的方