我試圖讓有複選框的3×3網格的Tkinter程序複選框的網格,我創建了這樣做的代碼是:的Python,Tkinter的:讓使用列表
import tkinter as tk
class App(tk.Frame):
def __init__(self,* args,** qwargs):
tk.Frame.__init__(self)
self.strCategories=("Q","W","E","R","T","Y","U","I","O")
self.varCategories={}
for x in self.strCategories:
self.varCategories[x] = tk.IntVar()
self.chckbxCategories={}
for i in range(3):
for j in range(3):
var = self.varCategories[self.strCategories[i*3+j]]
x=10/40 + 11*i/40
y=7/20 + 4*j/20
print(str(x),str(y))
checkbox = tk.Checkbutton(self, text=self.strCategories[i*3+j], font=('Lucida Grande',15),
anchor='w', bg='#FFFFFF', variable=var, onvalue=1, offvalue=0)
checkbox.place(relx=x, rely=y, relwidth=10/40, relheight=5/20)
self.chckbxCategories[self.strCategories[i*3+j]] = checkbox
app = App()
app.mainloop()
然而,小部件不會出現在屏幕上!如果我將.place
替換爲其他幾何體管理器,它可以工作(我想使用.place
,因爲它的relx
和rely
會爲我調整屏幕大小),所以我知道問題不在於製作小部件,而是放置它們。
我在做什麼錯?
殼牌輸出:
0.25 0.35
0.25 0.55
0.25 0.75
0.525 0.35
0.525 0.55
0.525 0.75
0.8 0.35
0.8 0.55
0.8 0.75
也許使用2維列表/元組'self.strCategories = [[」 Q「,」W「,」E「],[」R「,」T「,」Y「],[」U「,」I「,」O「]]'然後你就不需要'range 3)' – furas
它會更具可讀性'cb = tk.Checkbutton()'和'cb.place()'和'self.chckbxCategories [...] = cb' – furas
你使用Python 2嗎?然後'10/40'給出'0',而不是'0.25'。更好地使用'print'來檢查你分配給'relx','depend'等的值。 – furas