Проблема Tkinter с системой тегов: как это работает? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь кодировать Сапер с помощью Tkinter в Python 3. Посмотрите на код:

# -*- coding: utf-8 -*-
from tkinter import *
from random import *

color = "red"
case=[]
fenetre = Tk()

gamezone_x = 10
gamezone_y = 10
mines = 10

def leftclick(event):
    print("Leftclicked at", event.x, event.y)

def rightclick(event):
    print("Rightclicked at", event.x, event.y)

def mines_gen(mines):
    while(mines>0):
        x=randint(0,9)
        y=randint(0,9)
        print(case[x][y])
        Canvas.config(case[x][y], bg="blue")
        Canvas.addtag(case[x][y], "bomb")
        mines-=1

for x in range(gamezone_x):
    case.append([])
    for y in range(gamezone_y):
        case[x].append(Canvas(fenetre, width=20, heigh=20,bg="red"))
        case[x][y].grid(row=x, column=y)
        case[x][y].bind("<1>", leftclick)
        case[x][y].bind("<3>", rightclick)

mines_gen(mines)

fenetre.mainloop()

Я могу сгенерировать свою матрицу красного холста и изменить случайный холст синим цветом.Но когда у меня был «addtag» (в определении mine_gen », программа не работала и сказала TclError: неправильный # args: должен быть«.! Canvas22 тег addtag ​​searchCommand? Arg ...? »Я почти уверен, что яне понимаю, как работают теги и как их создавать / удалять / находить, а документы мне не помогают!

Как я могу добавить тег "бомба" на свой синий холст? Спасибо за ответы иизвините за мой английский, я француз!

1 Ответ

0 голосов
/ 19 сентября 2018

Вот простое изменение в вашем коде, которое установит случайные мины.

Вы не можете звонить Canvas() все время.Все, что вы делаете, это каждый раз создаете новый холст.Вместо этого вы должны вызывать объект canvas, который вы создали в списке case.Попробуйте следующее и дайте мне знать, если это то, что вы пытались сделать.

# -*- coding: utf-8 -*-
import tkinter as tk
from random import randint
color = "red"
case = []
fenetre = tk.Tk()

gamezone_x = 10
gamezone_y = 10
mines = 10

def leftclick(event):
    print("Leftclicked at", event.x, event.y)

def rightclick(event):
    print("Rightclicked at", event.x, event.y)

def mines_gen(mines):
    while(mines > 0):
        x=randint(0, 9)
        y=randint(0, 9)
        print(case[x][y])
        case[x][y].config(bg="blue")
        case[x][y].addtag("bomb", "closest", x, y)
        mines -= 1

for x in range(gamezone_x):
    case.append([])
    for y in range(gamezone_y):
        case[x].append(tk.Canvas(fenetre, width=20, heigh=20, bg="red"))
        case[x][y].grid(row=x, column=y)
        case[x][y].bind("<1>", leftclick)
        case[x][y].bind("<3>", rightclick)

mines_gen(mines)

fenetre.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...