Динамически добавлять предметы в Tkinter Canvas - PullRequest
1 голос
/ 13 мая 2010

Я пытаюсь выучить Tkinter с целью создания возможности для отображения данных в режиме реального времени. В качестве теста я пытаюсь нарисовать многоугольник на холсте при каждом нажатии кнопки «Рисовать». Положение треугольника рандомизировано. У меня две проблемы:

  1. После запуска программы на холсте появляется треугольник, почему и как это исправить?

  2. Когда я нажимаю кнопку, треугольники не рисуются, по крайней мере, те, которые я не вижу.

CODE


from Tkinter import *

from random import randint

class App:

    def __init__(self,master):

        #frame = Frame(master)
        #frame.pack(side = LEFT)

        self.plotspc = Canvas(master,height = 100, width = 200, bg = "white")
        self.plotspc.grid(row=0,column = 2, rowspan = 5)

        self.button = Button(master, text = "Quit", fg = "red", \
                             command = master.quit)
        self.button.grid(row=0,column=0)

        self.drawbutton = Button(master, text = "Draw", command = \
                               self.pt([50,50]))
        self.drawbutton.grid(row = 0, column = 1)        

    def pt(self, coords):
        coords[0] = coords[0] + randint(-20,20)
        coords[1] = coords[1] + randint(-20,20)
        x = (0,5,10)
        y = (0,10,0)
        xp = [coords[0] + xv for xv in x]
        yp = [coords[1] + yv for yv in y]
        ptf = zip(xp,yp)
        self.plotspc.create_polygon(*ptf)        

    if __name__ == "__main__":
        root = Tk()
        app = App(root)
        root.mainloop()

1 Ответ

5 голосов
/ 13 мая 2010

command=self.pt([50,50]) (который вы используете в вызове Button, который создает кнопку Draw) немедленно выполняет вызов, который вы велите ему выполнить, и связывает результат (None) command. Вместо этого используйте то же самое:

, command=lambda: self.pt([50, 50]) )

чтобы задержать выполнение вызова при каждом нажатии этой кнопки.

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