GUI Tkinter - problem s odezvou programu. – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

GUI Tkinter - problem s odezvou programu. – Python – Fórum – Programujte.comGUI Tkinter - problem s odezvou programu. – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
9. 6. 2010   #1
-
0
-

Ahoj,
delam jednoduchy programek v Pythonu - Tkinter GUI, ktery se bude starat o zapinani vypinani vzdalenych pocitacu. Pri tvorbe GUI jsem narazil na mensi problem, kdy v ramci mainloopu zavolam programek, ktery blokuje zbytek GUI dokud neskonci. Zkousel jsem experimentovat s metodou after, ale vzdy v momente kdy volana funkce byla casove narocnejsi, zamrzlo cele GUI dokud procedura neskoncila.

Udelal jsem jako priklad jednoduche udelatko s tlacitky start stop, kdy pri startu se spusti ping (parametry jsou zvolene pro tento pripad tak aby to timeoutovalo) Do budoucna chci spoustet celou tridu, ktera bude casove narocnejsi..

Uvedomuji si ze ve smycce mainloop dochazi k vnitrni smycce, ktera brzdi cely program..

Otazka zni. Jakym zpusobem bych mel resit takove moduly v gui, aby nezablokovaly cely program ? V programovani jsem zacatecnik a nejsem si jisty jestli to jde v ramci tkinteru a metody after - popr neceho jineho. (podprocesy,vlakna..)


Ukazkovy kod:

from Tkinter import *

import time
import subprocess


class Gui(Frame):
def __init__(self, parent=None, **kw):
Frame.__init__(self, parent, kw)
self._start=False

# Smycka, ktera brzdi mainloop.
def Cyklus(self):
if self._start:
print 'bezim'
self.after(1000,self.Cyklus)
p=subprocess.call('ping 1.1.1.1')


def Start(self):
self._start=True
print "stikl jsem tlacitko start"
self.Cyklus()

def Stop(self):
self._start=False
print 'skoncil jsem'

def main():
hlavni =Tk()
sw = Gui(hlavni)
sw.pack(side=TOP)

Button(hlavni, text='Start', command=sw.Start).pack(side=LEFT)
Button(hlavni, text='Stop', command=sw.Stop).pack(side=LEFT)


hlavni.mainloop()
if __name__ == '__main__':
main()



Diky, za kazdou radu Honza

Nahlásit jako SPAM
IP: 80.188.28.–
Reklama
Reklama
Blujacker
~ Moderátor
0
Grafoman
9. 6. 2010   #2
-
0
-
Nahlásit jako SPAM
IP: 84.42.166.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
10. 6. 2010   #3
-
0
-

To Blujacker :
Diky za radu, spustil jsem tridu jako samostatne vlakno a GUI ozilo :)

Nahlásit jako SPAM
IP: 80.188.28.–
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, 22 hostů

 

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