SmallPythonProjects/GTK-examples/AppendWidgetsAndRWthem.py
2021-07-01 14:17:59 +02:00

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