On 9/11/2017 10:12 AM, Paul Moore wrote:

Thanks for the information. That's more or less the sort of thing I
was thinking of. In fact, from a bit more browsing, I found another
way of approaching the problem - rather than using pygame, it turns
out to be pretty easy to do this in tkinter.

I was going to suggest tkinter.

The following code is basically the core of what I need:

import tkinter as tk

def create_board(root):
     board = {}
     for r in range(8):
         for c in range(8):
             lbl = tk.Button(bg="white", text="   ", font=("Consolas", 12))
             lbl.grid(row=r, column=c)
             board[r,c] = lbl
     return board

root = tk.Tk()
board = create_board(root)
root.mainloop()

Mainloop is a blocking call, and while it is running, one can only interact with the data and gui in ways that one has already programmed. If you run the above with python -i, or equivalently, from an IDLE editor, you will not see a >>> prompt until you close the tk windows, at which point there is nothing left to interact with.

That creates an 8x8 grid of white buttons. With this, I can make a
button red simply by doing

board[3,2]["bg"] = "red"

However, if you run the code above from an IDLE editor, you can omit or comment out the mainloop call and still see the board, because IDLE's run code calls tk's update in a non-blocking manner about 20 times a second. Without mainloop running, you immediately get a >>> prompt and can interact with the gui in a live exploratory fashion. You can enter statements like the color assignment above, and the background updates will make them quickly take effect.

(I just opened https://bugs.python.org/issue31421 to document this.)

That's really all I need. With that I can place objects on the grid by
asking them for their colour and x/y co-ordinates. Add a bit of driver
logic, and I have a display system. We can then spend the time working
on how we add business logic to the classes (movement, collision
detection, etc...)

I really need to spend some time looking into tkinter. I very rarely
think of it when developing code, and yet whenever I do it's amazingly
easy to put together a solution quickly and easily.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to