Quantcast
Channel: Active questions tagged frames - Stack Overflow
Viewing all articles
Browse latest Browse all 55

left and right frame with buttons in them

$
0
0

I want to create two frames next to each other with widgets in a mainframe, but I don't know how to make them both clickable, and I'm sure my code can be cleaned up. Any help is appreciated!

I started off with just making a single frame with widgets and than go from there, but my main problem is that the list constructor can only take one argument. I want to be able to use the self.squares variable for both frames but I'm not sure how to do that so I set up another square dictionary for the second frame but I think that makes things unnecessarily long. Here is my code below. The #here is where I'm having the most trouble.

class Board(tk.Frame):    def __init__(self, parent, length, width):  # self=Frame, parent=root        tk.Frame.__init__(self, parent)        self.parent = parent        self.length = length        self.width = width        self.config(height=100 * self.length, width=100 * self.width)        self.frame1 = tk.Frame()        self.frame2 = tk.Frame()        self.pack()        self.squares = {}        self.squares2 = {}        self.ranks = string.ascii_lowercase        self.buttons_pressed = 0        self.turns = 0        self.sq1 = None  # first square clicked        self.sq2 = None        self.sq1_button = None  # button associated with the square clicked        self.sq2_button = None        self.set_squares()    def select_piece(self, button):        if self.buttons_pressed == 0:            self.sq1 = list(self.squares.keys())[list(self.squares.values()).index(button)] #here            self.sq1_button = button            self.buttons_pressed += 1        elif self.buttons_pressed == 1:  # stores square and button of second square selected            self.sq2 = list(self.squares.keys())[list(self.squares.values()).index(button)]            self.sq2_button = button            if self.sq2 == self.sq1:  # prevents self-destruction and allows the user to choose a new piece                self.buttons_pressed = 0                return            if True:                self.squares[self.sq2].config(image=self.sq1_button["image"])                self.squares[self.sq2].image = self.sq1_button["image"]                self.squares[self.sq1].config(image=self.white_images["blank.png"])  # clears sq1                self.squares[self.sq1].image = self.white_images["blank.png"]                self.buttons_pressed = 0                return    def set_squares(self):  # fills frame with buttons representing squares        for x in range(5):            for y in range(5):                b = tk.Button(self.frame1, bg=self.square_color, activebackground="lawn green")                b.grid(row=8 - x, column=y)                b2 = tk.Button(self.frame2, bg=self.square_color, activebackground="lawn green")                b2.grid(row=8 - x, column=y)                pos = self.ranks[x] + str(y + 1)                self.squares.setdefault(pos, b,)  # creates list of square positions                self.squares2.setdefault(pos, b2)                self.squares[pos].config(command=lambda key=self.squares[pos]: self.select_piece(key))                self.squares2[pos].config(command=lambda key=self.squares2[pos]: self.select_piece(key))    def set_pieces(self):  # places pieces in starting positions        dict_rank1_pieces = {"a1": "dirt.png", "b1": "fire.png", "c1": "metal.png", "d1": "water.png", "e1": "wood.png"}        for key in dict_rank1_pieces:  # inserts images into buttons            starting_piece = dict_rank1_pieces[key]            self.squares[key].config(image=self.white_images[starting_piece])            self.squares[key].image = self.white_images[starting_piece]            self.squares2[key].config(image=self.white_images[starting_piece])            self.squares2[key].image = self.white_images[starting_piece]            self.frame1.pack(side='left')            self.frame2.pack(side='right')        for rank in range(2, 6):  # fill rest with blank pieces            for file in range(5):                starting_piece = "blank.png"                pos = self.ranks[file] + str(rank)                self.squares[pos].config(image=self.white_images[starting_piece])                self.squares[pos].image = self.white_images[starting_piece]                self.squares2[pos].config(image=self.white_images[starting_piece])                self.squares2[pos].image = self.white_images[starting_piece]root = tk.Tk()root.geometry("800x800")board = Board(root, 5, 5)board.import_pieces()board.set_pieces()board.mainloop()

Viewing all articles
Browse latest Browse all 55

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>