python - 无法生成 tkinter 滚动条
问题描述
self.root = tkinter.Tk()
self.frame = Frame(self.root, width = 1300, height = 1300, bg = "yellow")
self.frame.grid(row = 0 , column = 0, sticky = 'nw')
self.frame.grid_rowconfigure(0, weight=1)
self.frame.grid_columnconfigure(0, weight=1)
self.frame.grid_propagate(True)
self.canvas_main = Canvas(self.frame,
height = 300,
width = 300,
scrollregion=(500,500,0,500)
)
self.canvas_main.grid(row = 0, column = 0, padx= 10, pady = 10, sticky = "news")
self.scrollbar = Scrollbar(self.root, orient = VERTICAL, command = self.canvas_main.yview)
self.scrollbar.grid(row = 0, column = 1, sticky = 'ns')
self.canvas_main.configure(yscrollcommand=self.scrollbar.set)
在上面的代码块中,我输入了滚动条元素来启用垂直滚动条,但是它没有反映。谁能找出我在这个街区做错了什么?
解决方案
您已将可滚动区域 ( scrollregion
) 设置为零像素高,因此 tkinter 认为在垂直方向上没有可滚动的内容。
通常,您会先进行绘制,然后将可滚动区域设置为包含您绘制的所有内容。为此,您需要获取边界框(包含所有画布对象的最小矩形),然后将其用作scrollregion
.
例子:
canvas = tk.Canvas(...)
<draw a bunch of objects>
canvas.configure(scrollregion=canvas.bbox("all"))
另一种方法是提前定义虚拟绘图区域有多大。例如,您已将画布的宽度和高度设置为 300。如果您希望实际绘图区域是可见大小的两倍,那么您可以将scrollregion
区域设置为两倍大。
此示例将可滚动区域设置为从 0,0(左上角)开始,并扩展到 600,600(右下角):
canvas = tk.Canvas(..., width=300, height=300)
canvas.configure(scrollregion=(0,0,600,600)
推荐阅读
- angular - Angular - 在使用哈希更改 URL 后阻止 ngOnInit 调用
- python - Plotly Sankey:为什么节点放错了位置?
- r - 添加或删除文本输入行
- python - 与 1 的补码二进制表示混淆
- ruby - Ruby Action Mailer 在开发中不会发送到 smtp
- php - php - 使用 odbc_fetch_array 的索引数组错误
- kotlin - Kotlin:预期 ')' 错误,代码未运行
- javascript - 将对象数据映射到 React 组件
- c++ - 如何在 OMNet++/Eclipse CDT (Linux) 中添加 gRPC 作为依赖项?
- python - 如何按每天的升序和降序对日期和时间进行排序,并为排序后的日期创建指定列?