【问题标题】:Tinker Scrollbar not working with canvas widget修补程序滚动条不适用于画布小部件
【发布时间】:2020-05-01 16:29:44
【问题描述】:

我一生都无法弄清楚为什么这不起作用?我只是想让画布用滚动条滚动。

我已按照@BryanOakley 对问题Tkinter Scrollbar not working 的建议,但我似乎无法弄清楚我做错了什么。

这是我的代码:

import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master, bg= "#E3E5E6")
        self.master = master
        self.grid(sticky = "nesw")
        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(0, weight=1) 

        self.canvas = tk.Canvas(master)
        self.canvas.create_oval(10, 10, 20, 20, fill="red")
        self.canvas.create_oval(200, 200, 220, 220, fill="blue")
        self.canvas.grid(row=0, column=0, sticky = "nesw")

        self.scroll_x = tk.Scrollbar(master, orient="horizontal", command=self.canvas.xview)
        self.scroll_x.grid(row=1, column=0, sticky="ew")

        self.scroll_y = tk.Scrollbar(master, orient="vertical", command=self.canvas.yview)
        self.scroll_y.grid(row=0, column=1, sticky="ns")

        self.canvas.configure(yscrollcommand=self.scroll_y.set, xscrollcommand=self.scroll_x.set)
        self.canvas.configure(scrollregion=self.canvas.bbox((0,0,15000,15000)))

if __name__ == "__main__":
    root = tk.Tk()

    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    root.geometry("{}x{}+0+0".format(600,400))

    app = Application(master=root)
    app.mainloop()

非常感谢任何帮助。

【问题讨论】:

    标签: python user-interface tkinter tkinter-canvas


    【解决方案1】:

    改变这个:

    self.canvas.configure(scrollregion=self.canvas.bbox((0,0,15000,15000)))
    

    到这里:

    self.canvas.configure(scrollregion=(0,0,15000,15000))
    

    scrollregion 属性需要四个坐标的元组。调用 bbox 可以返回该元组,但前提是你给它一个项目 ID 或标签。你给它一个元组,因为画布上没有一个标签看起来像元组的项目,所以它返回None

    【讨论】:

    • 我不知道没有你的帮助,任何人是如何在 Tkinter 中学习编程的
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多