Home > other >  Two different while loops run simultaneously in Tkinter (python)
Two different while loops run simultaneously in Tkinter (python)

Time:06-27

I have made a simple chat system with python-requests. There are two different files one is the sender and another is the receiver. the main concept of these two files is 1. sender file contains a while loop which always takes the message as input. after giving the message as input, it sends the message to a website. 2. receiver file also contains a while loop which gets requests from the website after every 5 seconds. Now I want to run these two different works in the same window with Tkinter. how to do it? Thanks in advance.

Sender.py Code is here

import configme as con
import requests
import datetime
from cryptography.fernet import Fernet

nam = con.my_name
cookies_dict = con.cookie
key = con.crypto_key
url = con.base_url   '/config.php'



def makeID():
return datetime.datetime.now().timestamp()

# encription staff
fernet = Fernet(key)


# member joining message
if nam.__len__() != 0:
requests.get(url f"?iD={makeID()}&name=<<<>>>&msg={nam} join the room.", cookies=cookies_dict)


with requests.Session() as r:

while True: 
        msg = input("Enter your Messege: ")

        if msg == ".exit":
            # r.get(url f"?iD={makeID()}&name=<<<>>>&msg={nam} has left the room.", cookies=cookies_dict)
            break
        else:
            encMessage = fernet.encrypt(msg.encode())   
            messenger = {'iD': makeID() ,'name': nam , 'msg': encMessage}
            if msg != "":
                r.get(url, params=messenger, cookies=cookies_dict)

Receiver.py code here...

import configme as con
import requests
import json
from cryptography.fernet import Fernet
from time import sleep
from datetime import datetime
from pytz import timezone
import pytz

cookies_dict = con.cookie
ozone = con.my_timezone
key = con.crypto_key
time_format = con.date_time_format
url = con.base_url   '/log.json'
t = con.receive_time    


# encription staff
fernet = Fernet(key)


timezone = timezone(ozone)

def setTime(t):
stamptime = int(float(t))
GMT0 = pytz.utc.localize(datetime.utcfromtimestamp(stamptime))
return GMT0.astimezone(timezone).strftime(time_format)


j = 0
while True:
r = requests.get(url, cookies=cookies_dict).text
message = json.loads(r)
message_sz = len(message)

if message_sz == 0:
    print("Looks like there are no message")
    break

for msg in message[j:]:
    local_time = setTime(msg['id'])

    if msg['nam'] == '<<<>>>':
        print(f"{local_time} :: {msg['nam']} :: {msg['msg']}")
    else:   
        decMessage = fernet.decrypt(bytes(msg['msg'], "utf-8")).decode()
        print(f"{local_time} :: {msg['nam']} :: {decMessage}")  

j = message_sz
sleep(t)

CodePudding user response:

I would not suggest using this checking and going to website method, but you could thread the while loops to go at the same time. And you could update tk when you want using tk.update(). You could get Data from vars that the threaded loops are setting and use them in your single tk window.

CodePudding user response:

use multi threading .or else load data desperately

  • Related