Привязка нажатия кнопки командой (на ткинтере) - PullRequest
0 голосов
/ 03 мая 2018

Я кодирую симуляцию пожара в лесу. Код в основном готов, и результат можно увидеть ниже. Чтобы начать огонь, вы должны ввести координаты первого дерева, которое сгорит, чтобы оно могло распространяться вокруг.

Тем не менее, python будет спрашивать вас снова и снова об этих координатах, если дерево не найдено в обозначенной области. Следовательно, я ищу создание функции, которая бы помогла мне выбрать первое дерево, щелкнув по нему в окне tkinter и не теряя времени на поиск дерева.

Вы найдете ниже часть кода, которая спрашивает о координатах. При необходимости могу выложить весь код.

спасибо.

def take_input():
while 1:
    print("The coordinates to start the fire are :")
    debut =int(input("x= "))
    debutbis=int(input("y= "))
    xx=T[debut]
    yy=T[debut][debutbis]
    if yy == 0:
        print("Error, no tree found.")
    elif debut < 0 or debut >= len(T) or debutbis < 0 or debutbis >= len(T[0]):
        print("Error")
    else:
        break
app.after(200, burn_forest, debut, debutbis)

1 Ответ

0 голосов
/ 03 мая 2018

Поскольку вы не объясняете, как отображать деревья, я приведу два примера. Сначала, как получить координаты мыши cilck:

from tkinter import *

root = Tk()
root.geometry('200x200')

def click(event):
    print(event.x,event.y)

root.bind('<Button-1>', click)
root.mainloop()

Второй способ выбора объектов на холсте:

import tkinter as tk
import random

def on_click(event):
    current = event.widget.find_withtag("current")
    if current:
        item = current[0]
        color = canvas.itemcget(item, "fill")
        label.configure(text="you clicked on item with id %s (%s)" % (item, color))
    else:
        label.configure(text="You didn't click on an item")

root = tk.Tk()
label = tk.Label(root, anchor="w")
canvas = tk.Canvas(root, background="bisque", width=400, height=400)
label.pack(side="top", fill="x")
canvas.pack(fill="both", expand=True)

for color in ("red", "orange", "yellow", "green", "blue", "violet"):
    x0 = random.randint(50, 350)
    y0 = random.randint(50, 350)
    canvas.create_rectangle(x0, y0, x0+50, y0+50, outline="black", fill=color)
    canvas.bind('<ButtonPress-1>', on_click)

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