【问题标题】:Scrollable canvas having lines and buttons in tkinter在 tkinter 中具有线条和按钮的可滚动画布
【发布时间】:2021-08-16 17:52:58
【问题描述】:

我想在 tkinter 中有一个画布的水平滚动条。我的画布既有按钮又有线条。当我使用画布内置滚动条时,它只滚动线条而不滚动按钮。因此,对于我尝试使用此功能的按钮,该功能会在移动滚动条时移动按钮的位置。但是现在的问题是按钮和线条根据滚动条的宽度以不同的速度移动。滚动条为其末端提供相对坐标,但我需要绝对坐标,否则它会干扰按钮和线条的拖动功能。我已经坚持了一个星期,无法弄清楚任何有用的东西。在 stackoverflow 上尝试了几乎所有方法。

    Toplevel1.hbar = ttk.Scrollbar(panel_2, orient="horizontal")
    self.SystemCanvas.configure(scrollregion = (0, 0, 1000, 1000),
                                xscrollcommand = Toplevel1.hbar.set)
    Toplevel1.hbar['command'] = self.SystemCanvas.xview
    Toplevel1.hbar.bind('<B1-Motion>', lambda e:hscrollBarMove(e,
                            Toplevel1.hbar, self.SystemCanvas))
    Toplevel1.hbar.pack(side = "bottom", fill = "x")

def hscrollBarMove(event, hbar, systemcanvas):
    for instance in systemcanvas.winfo_children():
        if isinstance(instance, tk.Button) or isinstance(instance, tk.Menu):
            try:
                instance.place(relx = - hbar.get()[0])
            except:
                pass

按钮和线条是动态的。 请有人帮助我:(

【问题讨论】:

  • 使用canvas.create_window(...) 将按钮放入画布中。

标签: python tkinter canvas scrollbar


【解决方案1】:

我的画布既有按钮又有线条。当我使用画布内置滚动条时,它只会滚动线条而不是按钮。

是的,没错。画布只能滚动画布对象——使用各种create_* 方法(create_linecreate_window 等)创建的对象。它不会滚动使用placepackgrid 添加到画布的项目。

如果您想在画布上放置按钮并使其可滚动,请使用create_window 将它们添加到画布中。

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2017-09-29
    • 2015-02-08
    相关资源
    最近更新 更多