线程python无效

时间:2016-03-15 13:53:45

标签: python json multithreading rfid

这是我使用python和桌面编程的第一步。我一生都在网上工作,现在我需要做线程。 我尝试使用tkinterpyqt和现在gtktkinter的父亲)与glade xml合作。

我尝试了不同的模块,因为我每次都遇到同样的问题。界面有一个无限循环,所以我在谷歌上读了一下它,我第一次使用python,桌面和线程 所以这是我的代码可以有人说出了什么问题,为什么?

# -*- coding: utf-8 -*-
#Parallelism modulos
import threading
import Queue
#GUI modulos
import gtk, sys
#webservice modulos
import urllib2, json, urllib
#rfid modulos
import MFRC522
import signal
#GPIO modulos
import RPi.GPIO as GPIO
#sleep modulos
from time import sleep
#database modulos
import psycopg2

class Janela(threading.Thread):

    def on_window_destroy(self, data=None):
        gtk.main_quit()

    def __init__(self, queue):
        threading.Thread.__init__(self)
        self._queue = queue
    def run(self):
        builder = gtk.Builder()
        builder.add_from_file("interface.glade") 
        self.window = builder.get_object("window1")
        '''aluno informação'''
        self.alunoimage = builder.get_object("alunoimage")
        self.label = builder.get_object("nomecrianca")

        '''Responsavel informação'''
        builder.connect_signals(self)   



        imagefile = "anderson_caricatura.png" 
        self.alunoimage.set_from_file(imagefile)
        self.label.set_text("Anderson Santana")
        self.window.show()        
        gtk.main()

class RfID():

    def __init__(self):
        a = "343511711127"
        self.read()


    def beep(self):
        GPIO.setup(11, GPIO.OUT)
        GPIO.output(11, False)
        sleep(0.05)
        GPIO.output(11, True)
        sleep(0.05)
        GPIO.output(11, False)
        sleep(0.05)
        GPIO.output(11, True)
    def regulariza_cartao(self,cartao):
        string = ''.join(str(e) for e in cartao);
        return string

    def consulta_web_service(self,cartao):
        req =        urllib2.Request("http://192.168.1.161/ieduca/TheClientRfid.php?cartao="+cartao)
        response = urllib2.urlopen(req)
        the_page = response.read()
        return the_page


    def end_read(signal, frame):
        MIFAREReader = MFRC522.MFRC522()
        global continue_reading
        continue_reading = False
        print "Ctrl+C captured, ending read."
        MIFAREReader.GPIO_CLEEN()

    def read(self):


        continue_reading = True
        MIFAREReader = MFRC522.MFRC522()
        while continue_reading:

            (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
            (status,backData) = MIFAREReader.MFRC522_Anticoll()
            if status == MIFAREReader.MI_OK:
                self.beep()
                string = self.regulariza_cartao(backData)
                consome = self.consulta_web_service(string)

                jsonreaded = json.loads(consome)
                print "Tem responsavel? ",jsonreaded['have_responsavel']
                print "nome do estudante: ",jsonreaded['estudante_nome']
                print "estudante imagem: ",jsonreaded['estudante_imagem']
                print "imagem caminho: ",jsonreaded['estudante_caminho']

                urllib.urlretrieve("http://192.168.1.161/ieduca/"+jsonreaded['estudante_caminho']+jsonreaded['estudante_imagem'], jsonreaded['estudante_imagem'])
                print "baixou a imagem"
                queue = Queue.Queue()
                print "abriu comunicador"
                worker = Janela(queue)
                print "instanciou a janela"
                worker.start()
                print "iniciou a janela"
                queue.put('quit')
                print "pede pra sair 02"

                print "rala!"
def run():



    GUI = RfID()



run()

这段代码似乎与我的代码发生了什么

import threading
from time import sleep

#lets pretend this class is the rfid class and will be the first to run
class RFid(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        i=0
        d=True
        while d:
            print "oi"
            i = i+1
            print i
            if i==10:
                t2 = Gtk()#after some conditions in it while other class will run this class is the gtk (window, label, images)obs:no buttons
                t2.start()
                t2.join()
                sleep(5)
                del t2
                #self.run() (or something or something meaning it)
            #for example 
            ##if ctrl+c:
            ##d = False

class Gtk(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while True:#here on the gtk theres a infinity while never ends but it should close the window after some secs and than back to while of first class  
            print "ola"

#to resume the rfid will open a window with information of the owner of the rfidcard on scream
#but when the information are opened gtk enter on a infinity loop wainting for a event it will never happen
#when it should close after 5 secs and when other card's owner pass show other window and this forever...

def main():
    t1 = RFid()
    t1.start()


if __name__ == '__main__':
    main()

我希望你现在明白了

0 个答案:

没有答案