【发布时间】:2021-02-22 09:39:08
【问题描述】:
我正在尝试制作一个以购物为灵感的自动售货机 UI。目标是使用 for 循环和 2D 列表用框架填充我的框架,然后将按钮和标签打包到上面。代码如下:
frames = []
frame_order = []
num = 0
for x in range(5):
frames.append([])
for y in range(5):
frames[x].append(5)
for x in range(5):
for y in range(5):
frames[x][y] = Frame(store_canvas, width=1520 / 5, height=1030 / 5, bd = 2, relief = SOLID)
frames[x][y].grid(row=y, column=x)
frames[x][y].pack_propagate(False)
frame_order.append(frames[x][y])
这将重新运行一个 SQL 查询数据库,该数据库将返回一个作为 list[] 的项目列表。然后填充 2D list 内的框架
retrieve_tiem()
我还在有其他过滤器的一侧设置了另一个框架。问题是,如果过滤器查询 SQL 并返回小于网格大小(5x5,总共 25 个项目)的item list,则for 循环将不会运行,因为它无法填充。为了避免这种情况,我尝试使用 Try 和 Except 但循环只会用按钮填充剩余空间。
for frame in frame_order:
try:
Button(frame, anchor='nw', height = 9, width = 35, font = 20).pack()
Label(frame, text=str(Item_list[num]), anchor='nw', font = 20, width = 35, bg = 'darkgreen', fg = 'yellow' ).pack()
num += 1
except:
pass
有没有办法避免这种情况?就像在项目列表用完项目时不创建按钮或用'*blank*' 填充列表的其余部分直到列表达到框架可以容纳的项目总数?如果可行,我也对其他方法持开放态度。感谢所有答案,请放轻松,因为我还在学习 python 和 SQL :)
【问题讨论】: