2011-11-14 12 views
5
  • pitone 3.2.2
  • GTK3 3.2.2
  • python-gobject 3.0.2

sto cercando di visualizzare una GUI e fare un po 'di lavoro in background. Come ho capito dovrebbe assomigliare a questo:Python. Facendo qualche lavoro su sfondo con interfaccia grafica Gtk

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 


import time 
from threading import Thread 
from gi.repository import Gtk, Gdk 

class Gui(): 
     def run(self): 
       self.Window = Gtk.Window() 
       self.Window.set_border_width(8) 
       self.Window.set_title("Некий GUI") 
       self.Window.connect('destroy', lambda x: self.stop()) 

       self.outBut = Gtk.Button.new_from_stock(Gtk.STOCK_OK) 
       self.outBut.set_size_request(150, 35) 
       self.outBut.connect('clicked', lambda x: self.passfun) 
       self.Window.add(self.outBut) 

       self.Window.show_all() 

     def stop(self): 
       Gtk.main_quit() 

     def passfun(self): 
       pass 

class LoopSleep(Thread): 
     def run(self): 
       i = 1 
       while True: 
         print(i) 
         i = i + 1 
         #time.sleep(1) 



gui = Gui() 
gui.run() 

loopSleep = LoopSleep() 
loopSleep.start() 

Gdk.threads_init() 
Gdk.threads_enter() 
Gtk.main() 
Gdk.threads_leave() 

Ma non funziona. Diversi cicli si verificano quando si preme il pulsante. E il ciclo si avvia dopo che la finestra è chiusa. Ma non insieme.

Cosa faccio di sbagliato?

+0

È necessario includere il codice con la domanda. –

+0

Uso pastebin, perché non riesco a capire come il codice del lavoro si incolla qui. – Atterratio

+1

Si incolla, selezionare e premere il pulsante codice nell'editor. –

risposta

8

Non posso dire di essere esperto di threading Python né di gtk3 ma dopo aver giocato un po 'con il tuo esempio ho trovato qualcosa che sembra funzionare nel modo desiderato. Invece del sottotitolo Thread uso il threading.start (target = loop_sleep) e lo colloco all'interno di Gui.

Anche Glib.threads_init() è necessario.

#!/usr/bin/env python3 
from gi.repository import Gtk,Gdk, GLib 
import threading 
import time 

class Gui(Gtk.Window): 
    def __init__(self): 
     self.Window = Gtk.Window() 
     self.Window.set_border_width(8) 
     self.Window.set_title("Некий GUI") 
     self.Window.connect('destroy', lambda x: self.stop()) 

     self.outBut = Gtk.Button.new_from_stock(Gtk.STOCK_OK) 
     self.outBut.set_size_request(150, 35) 
     self.Window.connect('destroy', lambda x: self.stop()) 
     self.Window.add(self.outBut) 

     self.Window.show_all() 
     threading.Thread(target=loop_sleep).start() 

    def stop(self): 
     Gtk.main_quit() 

    def passfun(self): 
     pass 

def loop_sleep(): 
     i = 1 
     while True: 
      print(i) 
      i = i + 1 
      #time.sleep(1) 



app = Gui() 
GLib.threads_init() 
Gdk.threads_init() 
Gdk.threads_enter() 
Gtk.main() 
Gdk.threads_leave() 
Problemi correlati