python - 修补程序滚动条不适用于画布小部件
问题描述
我一生都无法弄清楚为什么这不起作用?我只是想让画布用滚动条滚动。
我已经遵循@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()
任何帮助深表感谢。
解决方案
改变这个:
self.canvas.configure(scrollregion=self.canvas.bbox((0,0,15000,15000)))
对此:
self.canvas.configure(scrollregion=(0,0,15000,15000))
该scrollregion
属性需要四个坐标的元组。调用bbox
可以返回那个元组,但前提是你给它一个项目 ID 或标签。你给它喂了一个元组,因为画布上没有一个项目的标签看起来像它正在返回的元组None
。
推荐阅读
- sql - 当数据中存在多对多关系时如何在 SQL 中获取唯一对
- swift - 减少位置管理器更新的频率
- c# - 在 xaml.cs 中单击 Wpf 按钮
- c# - Python.NET 如何在 Python 中执行 .NET 代码?它是如何收集垃圾的?
- mysql - 如何对 x 个相同的 MySQL SUM 表求和?
- javascript - 无法使用 jQuery 使输入行为作为选项卡
- java - Eclipse PowerMock 覆盖与 ECLEmma
- javascript - 如何防止 pwa 虚拟键盘破坏我的布局?我正在使用 vuejs
- ios - 如何在 iOS 上录制视频时保存 TrueDepth 数据?
- headless - 如何从命令提示符运行 Maven Serenity 测试以进行无头浏览器测试?