Multithreading python,two tkinter windows
Vindhyachal Takniki
vindhyachal.takniki at gmail.com
Sun Nov 1 09:05:58 EST 2015
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
[code]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
[/code]
analog.py
[code]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
[/code]
screen.py
[code]
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()
[/code]
screen2.py
[code]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()
[/code]
More information about the Python-list
mailing list