簡體   English   中英

放置多個 Tkinter 按鈕/標簽的更簡單方法?

[英]An easier way to place multiple Tkinter buttons/labels?

這是我的代碼,我想知道是否有更有效的方法來編寫這個網格

from tkinter import *

def btnClickFunction():
    print('clicked')

main = Tk()
main.geometry('745x435')
main.title('m')


Button(main, text='O', command=btnClickFunction).place(x=80, y=110)
Button(main, text='O', command=btnClickFunction).place(x=80, y=140)
Button(main, text='O', command=btnClickFunction).place(x=80, y=170)
Button(main, text='O', command=btnClickFunction).place(x=80, y=200)
Button(main, text='O', command=btnClickFunction).place(x=80, y=230)
Button(main, text='O', command=btnClickFunction).place(x=80, y=260)
Button(main, text='O', command=btnClickFunction).place(x=80, y=290)

Button(main, text='O', command=btnClickFunction).place(x=105, y=110)
Button(main, text='O', command=btnClickFunction).place(x=105, y=140)
Button(main, text='O', command=btnClickFunction).place(x=105, y=170)
Button(main, text='O', command=btnClickFunction).place(x=105, y=200)
Button(main, text='O', command=btnClickFunction).place(x=105, y=230)
Button(main, text='O', command=btnClickFunction).place(x=105, y=260)
Button(main, text='O', command=btnClickFunction).place(x=105, y=290)

Button(main, text='O', command=btnClickFunction).place(x=130, y=110)
Button(main, text='O', command=btnClickFunction).place(x=130, y=140)
Button(main, text='O', command=btnClickFunction).place(x=130, y=170)
Button(main, text='O', command=btnClickFunction).place(x=130, y=200)
Button(main, text='O', command=btnClickFunction).place(x=130, y=230)
Button(main, text='O', command=btnClickFunction).place(x=130, y=260)
Button(main, text='O', command=btnClickFunction).place(x=130, y=290)

Button(main, text='O', command=btnClickFunction).place(x=155, y=110)
Button(main, text='O', command=btnClickFunction).place(x=155, y=140)
Button(main, text='O', command=btnClickFunction).place(x=155, y=170)
Button(main, text='O', command=btnClickFunction).place(x=155, y=200)
Button(main, text='O', command=btnClickFunction).place(x=155, y=230)
Button(main, text='O', command=btnClickFunction).place(x=155, y=260)
Button(main, text='O', command=btnClickFunction).place(x=155, y=290)

Button(main, text='O', command=btnClickFunction).place(x=180, y=110)
Button(main, text='O', command=btnClickFunction).place(x=180, y=140)
Button(main, text='O', command=btnClickFunction).place(x=180, y=170)
Button(main, text='O', command=btnClickFunction).place(x=180, y=200)
Button(main, text='O', command=btnClickFunction).place(x=180, y=230)
Button(main, text='O', command=btnClickFunction).place(x=180, y=260)
Button(main, text='O', command=btnClickFunction).place(x=180, y=290)

Button(main, text='O', command=btnClickFunction).place(x=205, y=110)
Button(main, text='O', command=btnClickFunction).place(x=205, y=140)
Button(main, text='O', command=btnClickFunction).place(x=205, y=170)
Button(main, text='O', command=btnClickFunction).place(x=205, y=200)
Button(main, text='O', command=btnClickFunction).place(x=205, y=230)
Button(main, text='O', command=btnClickFunction).place(x=205, y=260)
Button(main, text='O', command=btnClickFunction).place(x=205, y=290)

Button(main, text='O', command=btnClickFunction).place(x=230, y=110)
Button(main, text='O', command=btnClickFunction).place(x=230, y=140)
Button(main, text='O', command=btnClickFunction).place(x=230, y=170)
Button(main, text='O', command=btnClickFunction).place(x=230, y=200)
Button(main, text='O', command=btnClickFunction).place(x=230, y=230)
Button(main, text='O', command=btnClickFunction).place(x=230, y=260)
Button(main, text='O', command=btnClickFunction).place(x=230, y=290)


Label(main, text='1').place(x=50, y=110)
Label(main, text='2').place(x=50, y=140)
Label(main, text='3').place(x=50, y=170)
Label(main, text='4').place(x=50, y=200)
Label(main, text='5').place(x=50, y=230)
Label(main, text='6').place(x=50, y=260)
Label(main, text='7').place(x=50, y=290)


Label(main, text='1').place(x=80, y=80)
Label(main, text='2').place(x=105, y=80)
Label(main, text='3').place(x=130, y=80)
Label(main, text='4').place(x=155, y=80)
Label(main, text='5').place(x=180, y=80)
Label(main, text='6').place(x=205, y=80)
Label(main, text='7').place(x=230, y=80)


main.mainloop()

這最好用嵌套for循環和grid幾何管理器來處理。 請注意我還如何將標簽偏移一行/一列,因此網格 (0, 0) 處沒有任何內容

import tkinter as tk  # it's best to avoid star imports!


# FYI: this should be 'btn_click_function' per Python style convention
def btn_click_function():  
    print('clicked')


main = tk.Tk()
main.geometry('745x435')
main.title('m')


for row in range(7):
    # row label
    r_lbl = tk.Label(main, text=row + 1)  # +1 to start numbering at 1 instead of 0
    r_lbl.grid(row=row + 1, column=0)
    for column in range(7):
        # column label
        c_lbl = tk.Label(main, text=column + 1)  # +1 to start numbering at 1...
        c_lbl.grid(row=0, column=column + 1)
        # button
        btn = tk.Button(main, command=btn_click_function, text='O')
        btn.grid(row=row + 1, column=column + 1)


if __name__ == '__main__':
    main.mainloop()

順便說一句:如果你想在行/列之間留出空間或改變按鈕的大小,你可以在每次調用grid()時使用padxpadyipadxipady args 來實現 - 這些將設置外部 x/ y 填充(小部件周圍的空間)和內部 x/y 填充(小部件內部的空間)

簡單的答案是使用循環來做到這一點。 x 和 y 值似乎呈線性增加,因此可以通過以下方式縮短代碼:

from tkinter import *

def btnClickFunction():
    print('clicked')

main = Tk()
main.geometry('745x435')
main.title('m')

#loop for placing all buttons
for i in range(80, 231, 25):
    for j in range(110, 291, 30):
        Button(main, text='O', command=btnClickFunction).place(x=i, y=j)

#loop for placing all vertical labels
for j in range(110, 291, 30):
    Label(main, text=str((j-110)//30+1)).place(x=50, y=j)

#loop for placing all horizontal labels
for i in range(80, 231, 25):
    Label(main, text=str((i-80)//25+1)).place(x=i, y=80)

main.mainloop()

使用循環執行此操作允許僅通過更改循環參數來縮放按鈕矩陣的大小。 為了生成 label 文本,使用了一個簡單的數學方程式來計算循環次數加 1。為了進一步改進此代碼,可以將 x 和 y 的范圍存儲在變量中,這樣增加矩陣的大小就意味着簡單改變變量值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM