Multithreading python,two tkinter windows


#1

I have made a python code & using multithreading in it. this is very basic code, not using queues & other stuff.

  1. Task is to create two independent Tkinter windows

  2. Code has four files:
    main.py:creates individual thread
    analog.py: generate random values every 1 sec & 10 sec
    screen.py: Tkinter file, screen keeps on updating every 1 sec
    scree2.py: Tkinter file, screen keeps on updating every 10 sec

  3. My code never run on gives anything. However if in main.py, I disable, one of either screen thread, another screen works fine. i.e they don't work together

main.py

import thread
import time
import analog
import screen
import screen2
thread.start_new_thread(analog.get_analog_1 , ("Thread-1",))
thread.start_new_thread(analog.get_analog_2 , ("Thread-2",))
thread.start_new_thread(screen.display , ("Thread-3",))
thread.start_new_thread(screen2.display , ("Thread-4",))
while 1:
    pass

analog.py

import time
from random import randint
current_time_1 = time.time();
current_time_2 = time.time();
read_ok_1 = 0
read_ok_2 = 0
analog_1 = 0
analog_2 = 0
#get reading at every 1 second
def get_analog_1(thread_name):
    global read_ok_1, current_time_1,analog_1
    while True:
        if((time.time() - current_time_1) > 1):
            if(0 == read_ok_1):
                current_time_1 = time.time();
                read_ok_1 = 1;
                analog_1 = randint(0,100)
#get reading on update                
def read_update_analog_1():
    global read_ok_1,analog_1
    data1 = 0
    val1 = 0
    if(1 == read_ok_1):
        read_ok_1 = 0;
        data1 = 1;
        val1 = analog_1
    return data1,val1                
    
#get reading at every 10 second
def get_analog_2(thread_name):
    global read_ok_2, current_time_2,analog_2
    while True:
        if((time.time() - current_time_2) > 10):
            if(0 == read_ok_2):
                current_time_2 = time.time();
                read_ok_2 = 1;
                analog_2 = randint(0,100)
#get reading on update                
def read_update_analog_2():
    global read_ok_2,analog_2
    data2 = 0
    val2 = 0
    if(1 == read_ok_2):
        read_ok_2 = 0;
        data2 = 1;
        val2 = analog_2
    return data2,val2

screen.py

from Tkinter import *
import analog
import thread
import time
class App():
    def __init__(self, master):
        self.master = master
        frame = Frame(master)
    frame.pack()

    label = Label(frame , text = "Analog" , font = ("Helvetica",32))
    label.grid(row = 0)

    self.reading_label = Label(frame, text = '0.0' , font = ("Helvetica",70))
    self.reading_label.grid(row = 1)
    
    self.update_reading()

    

def update_reading(self):        
    data1,val1 = analog.read_update_analog_1()
    if(1 == data1):
        reading_str = "{:.1f}".format(val1)
        self.reading_label.configure(text = reading_str)
    
    self.master.after(100 , self.update_reading)
def display(threadName):
    root = Tk()
    root.wm_title("Ammeter")
    app = App(root)
    root.geometry("480x320")
    root.mainloop()

screen2.py

from Tkinter import *
import analog
import thread
import time
class App():
    def __init__(self, master):
        self.master = master
        frame = Frame(master)
    frame.pack()

    label = Label(frame , text = "Analog" , font = ("Helvetica",32))
    label.grid(row = 0)

    self.reading_label = Label(frame, text = '0.0' , font = ("Helvetica",70))
    self.reading_label.grid(row = 1)

    self.update_reading()

    

def update_reading(self):

    data1,val1 = analog.read_update_analog_2()
    if(1 == data1):
        reading_str = "{:.1f}".format(val1)
        self.reading_label.configure(text = reading_str)
    
    self.master.after(1000 , self.update_reading)
def display(threadName):
    root = Tk()
    root.wm_title("Voltmeter")
    app = App(root)
    root.geometry("480x320")
    root.mainloop()

#3

Good question. Looks like user moved on.


#4

I spent a day reading up on this topic but concluded it was out of my present reach and opted out with no comment. We never know... Eventually somebody may bring further light to the discussion.


#5

Is this in Python 2 or 3?


#6

And what is "thread" ?


#7

Cannot say what version, specifically. Here is a SERP for python thread.


#8

I see. _thread for Python 3. Must be written in Python 2. Thanks.