138 lines
3.8 KiB
Python
138 lines
3.8 KiB
Python
#!/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 |