python - tkinter 中画布上的滚动条不起作用
问题描述
是的,有很多关于此的stackoverflow问题,我看到了所有内容但无法使其正常工作,所以我用我的代码提出了一个新问题:
基本上我想在 tkinter 中创建一个有 4 列的表。但我希望能够滚动它,因为这些行稍后将从 mysql 数据库中获取。但我无法让滚动工作。
这是我的代码:
from tkinter import *
root = Tk()
root.geometry("700x600")
frame_canvas = Frame(root)
frame_canvas.rowconfigure(0, weight=1)
frame_canvas.columnconfigure(0, weight=1)
frame_canvas.grid(row=0, column=0, sticky="news")
canvas = Canvas(frame_canvas)
canvas.grid(row=0, column=0, sticky="news")
vsb = Scrollbar(frame_canvas, orient="vertical", command=canvas.yview)
vsb.grid(row=0, column=1, sticky='ns')
canvas.configure(yscrollcommand=vsb.set)
for i in range(0, 50):
for j in range(0, 4):
canvas.columnconfigure(j, minsize=150)
Label(canvas, text="hello"+str(i)+str(j)).grid(row=i, column=j)
canvas.config(scrollregion=canvas.bbox("all"))
app = root
root.mainloop()
如何让画布滚动?还有另一种创建表的方法吗?稍后如果我想在表格底部添加一行,怎么可能?还是我必须清除整个画布并重新渲染它或其他什么?
编辑 在画布上添加了一个框架窗口。滚动仍然不起作用。这可能是现在的问题?
from tkinter import *
root = Tk()
root.geometry("700x600")
frame_canvas = Frame(root)
frame_canvas.rowconfigure(0, weight=1)
frame_canvas.columnconfigure(0, weight=1)
frame_canvas.grid(row=0, column=0, sticky="news")
canvas = Canvas(frame_canvas, height=600, width=500)
canvas.grid(row=0, column=0, sticky="news")
vsb = Scrollbar(frame_canvas, command=canvas.yview, orient="vertical")
vsb.grid(row=0, column=1, sticky='ns')
canvas.configure(yscrollcommand=vsb.set)
frame2 = Frame(canvas, bg="powder blue", height=600, width=700)
canvas.create_window((0, 0), anchor="nw", height=600, width=600, window=frame2)
for i in range(0, 50):
for j in range(0, 4):
frame2.columnconfigure(j, minsize=120)
Label(frame2, bg="powder blue", text="hello"+str(i)+str(j)).grid(row=i, column=j)
canvas.config(scrollregion=frame2.bbox("all"))
app = root
root.mainloop()
解决方案
推荐阅读
- python-3.x - 我在这个程序中得到一个错误的输出
- regex - 在 postgresql 中清理字符串
- embedded - ESP-IDF || 核心转储
- python - 将 random.random 均匀转换为指数分布不会产生正确的结果
- mongoose - Mongoose `$project` 如何避免重复文件
- c# - 如何自定义输出serilog
- transactions - 我们可以为 Atomikos JTA 属性中的某些属性设置值,并为其他属性获取 jta.properties 中指定的默认值吗?
- json - 在 Swift 中将 JSON 对象解码为纯字符串
- node.js - Node.JS 应用程序 CPU 使用率越来越高
- mysql - 一个 VIEW 的左 JOIN 与一个包含多个列的巨大表花费了太多时间