Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2017 02:12:12

cer
Зарегистрирован: 2017-11-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Автоматический вызов функции,периодически

Хочу вызывать периодически функцию на обновление переменной и вывод ее,считывая с usart. Оболочка tkinter. Попробовал так из pycharm:

 import serial
import threading
import time
from tkinter import *
root=Tk()
root.title('Usart-stm32')
root.geometry('250x250')
root['bg']='blue'
v = StringVar()
tex=Text(root,width=20,height=2,
         font='Verdana 12',
         wrap=WORD)
def get1(event,*args,**kwargs):
    threading.Timer(1.0, get1).start()
    time.sleep(2.0)
    print ("hello")
but3=Button(root,text='Hello')
but3.bind('<Button-1>',get1)
ent1 = Entry (root, textvariable = v,bg="black",fg="white",font=20,width=20,bd=20)
ent1.pack()
tex.pack()
but3.pack()
root.mainloop()

Сыплются ошибки при вызове функции get1
 Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\111\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 914, in _bootstrap_inner
    self.run()
  File "C:\Users\111\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 1180, in run
    self.function(*self.args, **self.kwargs)
TypeError: get1() missing 1 required positional argument: 'event'
hello

Может это больше проблема tkinter..

Офлайн

#2 Ноя. 2, 2017 03:20:23

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Автоматический вызов функции,периодически

для ткинтера есть after

 import tkinter as tk
import time
def tick():
    label.after(200, tick)
    label['text'] = time.strftime('%H:%M:%S')
root=tk.Tk()
label = tk.Label(font='sans 20')
label.pack()
label.after_idle(tick)
root.mainloop()

Отредактировано vic57 (Ноя. 2, 2017 03:43:08)

Офлайн

#3 Ноя. 2, 2017 03:49:06

cer
Зарегистрирован: 2017-11-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Автоматический вызов функции,периодически

Благодарю,сейчас попробую.
И если можно задам вопрос сюда по библиотеки serial заодно или отдельную тему делать?
Например я открываю порт,пишу в него все нормально,но чтение порта происходит ожиданием приема определенного количества битов

  s = ser.read(10)        # read up to ten bytes (timeout)
А вот если они не придут и программа висеть будет так,как то можно по времени ограничить выполнение ser.read и выходом с описанием ошибки?

Офлайн

#4 Ноя. 2, 2017 04:57:33

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Автоматический вызов функции,периодически

вроде есть флаг наличия данных
http://forum.amperka.ru/threads/raspberry-arduino-и-pyserial.5394/

Офлайн

#5 Ноя. 2, 2017 05:27:49

cer
Зарегистрирован: 2017-11-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Автоматический вызов функции,периодически

Спасибо,бум дальше делать

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version