我想為串列中的每個專案創建按鈕,但需要找出如何將它們全部放入同一框架中。理想情況下,我想將 4 或 5 個按鈕排成一行,然后直接顯示接下來的 4-5 個按鈕。這是我現在所擁有的:
from tkinter import ttk
from restaurantSoftware import restaurantInfo
class menuFrame:
def __init__(self, frame):
self.frame = frame
availableItems = restaurantInfo.readRestaurantInfo('availableItems.csv')
itemList = availableItems[0]
priceList = availableItems[1]
categoryList = availableItems[2]
for item in itemList:
button = ttk.Button(text=item)
button.pack(side='left', ipadx=25, ipady=25)
這是運行程式時我的 tkinter 布局的螢屏截圖。

uj5u.com熱心網友回復:
您可以使用內置divmod函式回傳乘數和余數,使得a, b = divmod(c, d)=>a * d b = c允許計算應放置小部件的行和列:
import tkinter as tk
COLUMNS = 3
item_list = ['Cheese burger', 'BLT', 'Cheese Pizza', 'Chicken Fillet',
'Hot dog', 'Caesar Salad', 'Chicken Salad']
root = tk.Tk()
for i, item in enumerate(item_list):
lbl = tk.Button(root, text=item)
row, column = divmod(i, COLUMNS)
lbl.grid(row=row, column=column, sticky='news')
root.mainloop()
uj5u.com熱心網友回復:
最簡單的方法是使用grid代替pack和 for 回圈將按鈕放置在網格上。下面是如何做到這一點的一個例子:
import tkinter as tk
root = tk.Tk()
item_list = ['Cheesburger','BLT','Cheese Pizza','Chicken Filet',
'Hotdog','Caesar Salad','Chicken Salad']
row_length = 4
for row in range(1000): # Any number bigger than anticipated number of rows
if row_length*row >= len(item_list):
break
for col in range(row_length):
if row_length*row col >= len(item_list):
break
b = tk.Button(root, width=15, text=item_list[row_length*row col])
b.grid(row=row, column=col)
root.mainloop()
由于我將打破回圈,因此第一個回圈中的范圍有多大并不重要。現在這個解決方案可能會得到明確的改進,但這只是一個開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/375687.html
上一篇:鍵盤輸入無重復延遲
