Smycka v Tkintru – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Smycka v Tkintru – Python – Fórum – Programujte.comSmycka v Tkintru – Python – Fórum – Programujte.com

 

john-smith0
Newbie
11. 3. 2017   #1
-
0
-

Dobrý den,

na Raspberry Pi mám program pro vykreslení grafu teploty. Teplota se meří v nějakém intervalu a graf se vykresluje na plátně( Canvas). Mám problém v tom že když čekám onen interval mezim jednotlivými měřeními tak je celé okno nepřístupné.

Chci se zeptat zda existuje možnost jak v Pythonu udělat v určitém intervalu nějakou činnost ale přitom aby po celou dobu byly přístupné všechyn prvky v okně, např. tlačítka atd.

Přikládám zkoušku programu na kterém jsem zkoušel vyřešit neúspěšně tenhle problém.

from Tkinter import *
import time

a=1
def tisk():
    print a
    
hlavni=Tk()

simulace = Canvas(hlavni, width=500, height=300)
simulace.grid()

Tlacitko = Button(hlavni, text="tisk", command = tisk)
Tlacitko.grid()

while a<20:
    time.sleep(1)
    simulace.create_oval(250-a, 150-a, 250+a, 150+a)
    a=a+1
    
hlavni.mainloop()
Nahlásit jako SPAM
IP: 80.95.125.–
gna
~ Anonymní uživatel
1850 příspěvků
11. 3. 2017   #2
-
0
-

V Tkinteru jde naplánovat spuštění funkce pomocí after(). Pokud je to samotné měření blokující a pomalé, možeš ho spustit v samostatném vlákně. Předávání dat se pak typicky řeší přes frontu. Může to vypadat nějak takhle:

import threading, Queue

queue = Queue.Queue()                                                           
                                                                                
def update():                                                                   
	while queue.qsize():                                                    
		i = queue.get(0)                                                
		print("get %d" % i)                                             
	hlavni.after(100, update)                                               
                                                                                
def worker():                                                                   
	for i in range(20):                                                     
		time.sleep(1)                                                   
		print("put %d" % i)                                             
		queue.put(i)                                                    
                                                                                
def start():                                                                    
	hlavni.after(100, update)                                               
	t = threading.Thread(target=worker)                                     
	t.daemon = True                                                         
	t.start()
Nahlásit jako SPAM
IP: 213.211.51.–
john-smith0
Newbie
12. 3. 2017   #3
-
0
-

Díky, to je přesně co jsem potřeboval. Konečně to šlape jak má.

Nahlásit jako SPAM
IP: 80.95.125.–
john-smith0
Newbie
15. 3. 2017   #4
-
0
-

Ještě bych potřeboval poradit jak skrýt, čáry namalované v Canvasu.

Chci si vykresilt více grafů do jednoho Canvasu a dle potřeby některý z nich skrýt nebo zase zobrazit.

Myslím že by šlo přiřadit všem čarám jednoho grafu stejný tag a ten potom skrývat nebo zobrazit.

Nahlásit jako SPAM
IP: 80.95.125.–
miHan0
Návštěvník
16. 3. 2017   #5
-
0
-

#4 john-smith
A nebylo by praktičtější naopak vykreslovat jen to co je třeba?

Nahlásit jako SPAM
IP: 88.146.182.–
john-smith0
Newbie
16. 3. 2017   #6
-
0
-

#5 miHan
Asi nechápu přesně jak to myslíš.

Já teď v určitých intervalech měřím teplotu z osmi čidel a jejich hodnoty zakresluju do jednoho grafu. Čáry jsou různě přes sebe proto chci mít možnost skrýt kdykoli hodnoty z čidla které zrovna nepotřebuju a pak je zase zobrazit.

Myslím si že je jednoduší je skrýt, než je např. smazat a k zobrazení je zase vykreslit. Hodnot není málo a jejich přepočet do toho grafu nějaký čas zabere.

Nahlásit jako SPAM
IP: 80.95.125.–
gna
~ Anonymní uživatel
1850 příspěvků
16. 3. 2017   #7
-
0
-

Nevím na co se ptáš. Jak to skrytí udělat?

canvas.create_neco(..., tags=<tag>)
...
canvas.itemconfig(<tag>, state="hidden") # normal, disabled, hidden
Nahlásit jako SPAM
IP: 213.211.51.–
john-smith
~ Anonymní uživatel
30 příspěvků
16. 3. 2017   #8
-
0
-

#7 gna
Díky to bylo to co jsem potřeboval.

Nahlásit jako SPAM
IP: 46.13.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Raspberry Pi2: Picamera v Tkintru — založil john-smith

Delphi 7 - smycka — založil Cola-loka

Nekonecna smycka — založil papen

Nekonečná smyčka — založil miguel

ATmega a smyčka while — založil Palkic.89

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý