使用按钮为我的tkinter窗口压缩我的班级

时间:2016-03-01 18:47:46

标签: python class for-loop tkinter nested-loops

我有一个问题,我可以压缩这段代码(我被告知我可以),但没有得到任何帮助这样做,并且不知道怎么做。

尝试将其置于for循环中,但我想要一个3x3网格的按钮,其中一个是列表框,而不是按钮的中心。

我环顾四周,一小时后,我没有回答。

在这里,我尝试将每个按钮附加到列表并将它们打包到for循环中,但是是否可以在for循环中完成它们并且Listbox完成并单独打包后?

class MatchGame(Toplevel):
    def __init__(self,master):
        self.fr=Toplevel(master)
        self.GameFrame=Frame(self.fr)
        self.AllButtons=[]
        self.AllButtons.append(Button(self.GameFrame,bg="red",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="green",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="dark blue",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="turquoise",height=5,width=15,text=""))
        self.AllButtons.append(Listbox(self.GameFrame,bg="grey",height=5,width=15))
        self.AllButtons.append(Button(self.GameFrame,bg="yellow",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="pink",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="orange",height=5,width=15,text=""))
        self.AllButtons.append(Button(self.GameFrame,bg="purple",height=5,width=15,text=""))
        for x in range(0,len(self.AllButtons)):
            AllButtons[x].grid(row=int(round(((x+1)/3)+0.5)),column=x%3)
        self.GameFrame.grid(row=0,column=0)
        Quit=Button(self.fr, text="Destroy This Game", bg="orange",command=self.fr.destroy)
        Quit.grid(row=1,column=0)

它需要有各自的颜色,相同的尺寸和所有这些,但我不知道该怎么做。我是一个相当新的课程,我不能为我的生活做出如何用紧凑的代码制作这个窗口(每个对象不是9行,然后将它们全部打包。)

1 个答案:

答案 0 :(得分:1)

如果要动态创建3x3网格按钮。然后嵌套的for循环似乎是你最好的选择。

示例:

import tkinter as tk

root = tk.Tk()
# List of your colours
COLOURS = [['red', 'green', 'dark blue'],
           ['turquoise', 'grey', 'yellow'],
           ['pink', 'orange', 'purple']]

# Nested for-loop for a 3x3 grid
for x in range(3):
    for y in range(3):        
        if x == 1 and y == 1: # If statement for the Listbox
            tk.Listbox(root, bg = COLOURS[x][y], height=5, width=15).grid(row = x, column = y)
        else:
            tk.Button(root, bg = COLOURS[x][y], height=5, width=15).grid(row = x, column = y)

root.mainloop()