Tkinter的画面内定位标签

问题描述 投票:0回答:1

我想提出一个棋盘游戏Tkinter的。该板是一个单一的图象。我不知道该怎么走卒位置上的画面。

我试图把董事会和棋子一样画布上。它曾与一个单一的棋子,但有多个棋子它得到杂乱。兵通过用匹配的颜色(即,蓝色)的正方形表示。

def create_grid(self):
    self.grid_frame = Canvas(window)
    self.green_frame = Canvas(window)
    self.blue_frame = Canvas(window)
    self.grid_frame.grid(row=1, column=0)
    self.green_frame.grid(row=1, column=0)
    self.blue_frame.grid(row=1, column=0)
    self.grid_picture = PhotoImage(file="grid.PNG")
    self.grid_label = Label(self.grid_frame, image=self.grid_picture)
    self.grid_label.grid(row=0, column=0, columnspan=100, rowspan=10)
    self.green_picture = PhotoImage(file="green.png")
    self.green_symbol = Label(self.green_frame, image=self.green_picture)
    self.green_symbol.grid(row=9, column=2, columnspan=100, rowspan=10)
    self.blue_picture = PhotoImage(file="blue.png")
    self.blue_symbol = Label(self.blue_frame, image=self.blue_picture)
    self.blue_symbol.grid(row=9, column=7, columnspan=100, rowspan=10)

用上面的功能之后,我都尝试棋子摆在中间的板土地。然而,我需要划分画布和精确地放置标签,我想。

这里的结果我得到的图片:

enter image description here

python tkinter tkinter-canvas
1个回答
1
投票

如果您的实现并不需要创建标签,我会建议图纸和删除画布对象。 Canvas类有简单的方法,如create_text()create_image()供您使用。这里是这样的实现(我已经使用文本,但可以很容易地改变成图像,通过使用上述方法my_canvas.create_image())的例子:

import tkinter as tk

# PARAMETERS

SIZE = 800
SQUARES = 10


def draw_board():
    i = 0
    while i < SIZE:
        canvas.create_line(0, i, SIZE, i)
        canvas.create_line(i, 0, i, SIZE)
        i += SIZE / SQUARES


def place_pawn(x, y, color):
    pos = [(x-0.5)*SIZE/SQUARES, (y-0.5)*SIZE/SQUARES]
    pawn_colors = {'blue': '#104E8B', 'green': '#008B45'}
    canvas.create_text(pos, text='P', font=('Times', 30), fill=pawn_colors[color])


root = tk.Tk()
root.minsize(SIZE, SIZE)
canvas = tk.Canvas(root, width=SIZE, height=SIZE)
canvas.pack()
draw_board()
place_pawn(2, 3, 'blue')
place_pawn(8, 6, 'blue')
place_pawn(1, 1, 'blue')
place_pawn(9, 9, 'green')
place_pawn(9, 1, 'green')

root.mainloop()

作为您的实现的,你应该检查电网管理者是如何工作的。我已经测试了它和代码不正是你问它做的事情。指定行= 9和列= 5,例如,如果不存在其他较小的列和行不会将在9行第5列的标签。不管怎样,在你的代码中创建不同颜色的棋子2个画布对象。然后,你把所有的画布对象在网格中的同一个小区。这将创建与董事会画面一个大帆布,并在中心的两个小尺寸的画布对象。当你把一个棋子里面,画布对象只是扩大到典当图像的大小,留在中央。

© www.soinside.com 2019 - 2024. All rights reserved.