#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Mar 19 22:04:11 2021 @author: angoosh """ import threading #from multiprocessing import Process, Queue import queue import gi from time import sleep gi.require_version('Gtk', '3.0') gi.require_version('GLib', '2.0') from gi.repository import Gtk, GLib IsEnded = 0 counter = 0 rows = [] def do_work(com_queue): global counter while True: counter += 1 com_queue.put(str(counter)) sleep(0.1) print("A") if IsEnded != 0: break # continue #from multiprocessing import Process, Queue class MainGUI(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Append") self.com_queue = queue.Queue() self.worker_thread = None self.liststore = None self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(self.vbox) self.box = Gtk.Box(spacing=6) #self.add(self.box) self.vbox.pack_start(self.box, True, True, 0) self.textArea = Gtk.Entry() self.textArea.set_text("Ready") #self.textbuffer = self.textArea.get_buffer() #self.textbuffer.set_text("Ready: \n", 9) self.box.pack_start(self.textArea, True, True, 0) self.button1 = Gtk.Button(label="Add") self.button1.connect("clicked", self.addRow) self.box.pack_start(self.button1, True, True, 0) self.button2 = Gtk.Button(label="List") self.button2.connect("clicked", self.butt) self.box.pack_start(self.button2, True, True, 0) self.tid = None self.proc = None def launch_worker_thread(self): #self.proc = Process(target=do_work, args=(self.com_queue,)) #self.proc.start() self.worker_thread = threading.Thread(target=do_work, args=(self.com_queue,)) self.worker_thread.start() try: self.tid = GLib.timeout_add(1, self.check_queue, None) # run check_queue every 1 second except: print("Error") def butt(self, widget): global rows print(rows) for row in rows: row[2].set_text("3") #print(row.nlabel.get_text()) def addRow(self, widget, varType="uint8_t", varName="x", value="10"): global rows nbox = Gtk.Box(spacing=6) self.vbox.pack_start(nbox, True, True, 0) nlabel = Gtk.Label(label=varType+" "+varName+":") nbox.pack_start(nlabel, True, True, 0) nentry = Gtk.Entry() nentry.set_text(value) nentry.connect("activate", self.printContent, varType, varName,) nbox.pack_start(nentry, True, True, 0) nbox.show_all() rowContent = [len(rows), nlabel, nentry] rows.append(rowContent) def printContent(self, widget, vt, vn): print(vt+" "+vn+": "+widget.get_text()) def butt2(self, widget): global IsEnded IsEnded = 1 def prn(self, ignored): print("B") GLib.idle_add(self.update_treeview, "update") def check_queue(self, ignored): if self.tid is not None: #if self.worker_thread.is_alive(): try: update = self.com_queue.get(False) GLib.idle_add(self.update_treeview, update) # send tuple except queue.Empty: pass return True # to keep timeout running else: return False # to end timeout def update_treeview(self, update): text_end = self.textbuffer.get_end_iter() self.textbuffer.insert(text_end, str(update)) # here update the treeview model with tuple if __name__ == "__main__": gui = MainGUI() gui.connect("destroy", Gtk.main_quit) gui.show_all() Gtk.main() IsEnded = 1