簡體   English   中英

在 Tkinter (python) 中同時運行兩個不同的 while 循環

[英]Two different while loops run simultaneously in Tkinter (python)

我用 python-requests 做了一個簡單的聊天系統。 有兩個不同的文件,一個是發送者,另一個是接收者。 這兩個文件的主要概念是 1. sender 文件包含一個 while 循環,它總是將消息作為輸入。 在將消息作為輸入后,它將消息發送到網站。 2.接收器文件還包含一個while循環,它每5秒從網站獲取請求。 現在我想用 Tkinter 在同一個窗口中運行這兩個不同的作品。 怎么做? 提前致謝。

Sender.py 代碼在這里

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 代碼在這里...

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)

我不建議使用這種檢查並訪問網站的方法,但是您可以同時將 while 循環線程化。 您可以在需要時使用 tk.update() 更新 tk。 您可以從線程循環正在設置的變量中獲取數據,並在單個 tk 窗口中使用它們。

使用多線程。或者拼命加載數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM