LINUX.ORG.RU

python tkinter вопрос по canvas


0

0

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


from tkinter import *
from tkinter import ttk

def main():
a=1
root = Tk()
root.title("grafics")

v=StringVar()
#Описываем виджиты
content = Frame(root)
frame = Frame(content, borderwidth=5, relief="sunken", width=600, height=400)
timelbl = Label(content, text="t:")
time = Entry(content, textvariable=v)
levellbl = Label(content, text="level:")
level = Entry(content)
ok = Button(content, text="Okay")
canvas = Canvas(frame, width=600, height=400)

i = canvas.create_line(10, 10, 200, 50)
canvas.coords(i,a,20,100,50) # change coordinates
a = a+1
v.set(a)
time.insert=(0,"asdas")
#Выводим виджиты на экран
content.grid(column=0, row=0)
frame.grid(column=0, row=0, columnspan=3, rowspan=20)
timelbl.grid(column=3, row=0)
time.grid(column=3, row=1)
levellbl.grid(column=5, row=0)
level.grid(column=5, row=1)
ok.grid(column=3,row=2)
canvas.grid(column=0, row=0, sticky=(N, W, E, S))

root.mainloop()

if "__main__" == __name__:
#Runned as programm
main()

По-моему нет такой возможности в Тк что бы график сам обновлялся. Самому это надо делать В Tcl есть комманда after 1000 <command>, которая каждую секунду запускает скрипт command, где можно поменять координаты. В Python можно думаю аналогичное замутить.

placement_new ★★
()

почему при нажатии на кнопку ничего не происходит ? В чем ошибка ???

from tkinter import *

a = 0

def main():
    root = Tk()

    content = Frame(root)
    frame = Frame(content, borderwidth=2, relief="sunken", width=600, height=400)
    
    canvas = Canvas(frame, width=600, height=400)
    
    v=StringVar()
    def draw_grafics():
        global a
        a = a+30
        v.set(a)
        canvas.create_line(25, a, 200, a)
        print()
        
    root.title("LPT grafics")
    
    #Описываем виджиты
    timelbl = Label(content, text="t:")
    time = Entry(content, textvariable=v)
    levellbl = Label(content, text="level:")
    level = Entry(content)
    ok_button = Button(content, text="Okay", command=draw_grafics())
    
    
    time.insert=(0,"asdas")
    #Выводим виджиты на экран
    content.grid(column=0, row=0)
    frame.grid(column=0, row=0, columnspan=3, rowspan=20)
    timelbl.grid(column=3, row=0)
    time.grid(column=3, row=1)
    levellbl.grid(column=5, row=0)
    level.grid(column=5, row=1)
    ok_button.grid(column=3,row=2)
    canvas.grid(column=0, row=0, sticky=(N, W, E, S))

    frame.bind("<Motion>", draw_grafics())
    root.mainloop()

if "__main__" == __name__:
    #Runned as programm
    main()

ananimys
() автор топика
Ответ на: комментарий от ananimys

> ok_button = Button(content, text="Okay", command=draw_grafics())

Тут надо передовать саму функцию, а не ее результат:

ok_button = Button(content, text="Okay", command=draw_grafics)

xtin
()

Вот пример программы

from tkinter import *
from random import random
x0, y0 = 0, 0
def draw():
    global x0, y0
    canvas.after(1000, draw)
    x1, y1 = int(random()*200), int(random()*200)
    canvas.create_line(x0, y0, x1, y1)
    x0, y0 = x1, y1
canvas = Canvas()
canvas.pack()
canvas.after(1000, draw)
mainloop()

xtin
()
Ответ на: комментарий от placement_new

Питон тут совершенно не причем Сырость, постоянная сырость

placement_new ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.