Ho solo programmato web fino ad oggi perciò sto faticando molto ad utilizzare e capire il concetto di threading.
codice:#!/usr/bin/env python """ People's Poker Heads-Up SNG HUD @Author: Tomas Bartoli <***@gmail.com> @Date: 29/12/2016 @License: Copyright (C) 2016-2017 This software is not open source """ # Import general libraries used in the application import os, sys, re, threading, time # Import GUI libraries import pygtk pygtk.require('2.0') import gtk """ """ class HUDCore(object): __rootPath = None __dataPath = None __libPath = None __config = {} __dbOBj = None """ """ def __init__(self): self.__initEnvironment() self.__initDatabase() self.__initInterface() # End __init__ """ " Set environment data " " @method private " @return void """ def __initEnvironment(self): self.__rootPath = sys.path[0] + os.sep self.__dataPath = sys.path[0] + os.sep + 'data' + os.sep self.__libPath = sys.path[0] + os.sep + 'libraries' + os.sep os.chdir(self.__libPath) sys.path.append(self.__libPath) # End __initEnvironment """ " Connection and selection at the database " " @see librariesdatabase.py " @method private " @return void """ def __initDatabase(self): file = open(self.__dataPath + 'config.ini', 'r') while True: line = file.readline() if line == '': break search = re.findall('([A-Z]{4})s=s"(.*?)"', line) self.__config[search[0][0]] = search[0][1] file.close() import database self.__dbOBj = database self.__dbOBj.db(self.__config['HOST'], self.__config['USER'], self.__config['PASS'], self.__config['NAME']) # End __initDatabase """ " Print GUI window """ def __initInterface(self): self.window = gtk.Window(type = gtk.WINDOW_TOPLEVEL) self.window.set_position(gtk.WIN_POS_CENTER) self.window.connect('delete_event', self.deleteEvent) self.window.connect('destroy', self.destroy) self.window.set_title('People's Poker Heads-Up SNG HUD') self.window.set_size_request(200, 50) self.window.set_resizable(False) hbox = gtk.HBox(True, 10) hbox.set_border_width(10) self.window.add(hbox) hbox.show() self.BTNImport = gtk.Button('Start Import') hbox.pack_start(self.BTNImport, True, True, 0) self.BTNImport.connect('clicked', self.clickImport) self.BTNImport.show() # End __initInterface """ " @see \__initInterface() " " @method private " " @param widget " @param event " @param data " " @return bool False """ def deleteEvent(self, widget, event, data = None): return False # End deleteEvent """ " @see \__initInterface() " " @method private " " @param widget " @param data " " @return bool False """ def destroy(self, widget, data = None): self.__dbOBj.close() self.window.destroy() gtk.main_quit() # End destroy """ """ def clickImport(self, widget, data = None): if self.BTNImport.get_label() == 'Start Import': self.BTNImport.set_label('Stop Import') var = threading.Thread(target=self.tryThread) var.setDaemon(True) var.start() else: self.BTNImport.set_label('Start Import') # End destroy def tryThread(self): i = 0 while True: print str(i) i = i + 1 time.sleep(5) """ """ def main(self): self.window.show() gtk.main() exit # End main # End class HUDCore if __name__== '__main__': init = HUDCore() init.main()
Se provate ad eseguire il codice ci sarà un bottone con scritto "Start Import", cliccandoci sopra vorrei venisse eseguita questa porzione di codice:
codice:var = threading.Thread(target=self.tryThread) var.setDaemon(True) var.start() # [...] def tryThread(self): i = 0 while True: print str(i) i = i + 1 time.sleep(5)
e quindi cominciasse a stamparmi in loop dei numeri crescenti ogni 5 secondi, senza però condizionare il funzionamento del programma, non mi stupisce che non funziona, il ciclo viene avviato solo quando chiudo la GUI, perchè?

Rispondi quotando