Почему.! Entry> сохраняется в виджете ввода, когда я набираю числа? - PullRequest
0 голосов
/ 09 июля 2020

Ниже мой код для GUI с использованием tkinter, который принимает записи от пользователя с помощью виджета Entry и сохраняет их в списке. Позже в функции он выполняет итерацию для выполнения некоторых вычислений.

КОД клиента


import socket
import turtle
#import time
import queue
import threading
from tkinter import *

class GUI:
    entries = []
    def __init__(self, master):
        self.master = master
        master.title("Collision Detection")

        self.buff_data = queue.Queue()

        self.t1 = threading.Thread(target = self.recvData)
        self.t2 = threading.Thread(target=self.calculate_threshold)
        self.entries = []


        self.host = '127.0.0.1'
        self.port = 5001
        self.s = socket.socket()
        self.s.connect((self.host, self.port))

        self.create_GUI()

    def create_GUI(self):

    
        self.input_label = Label(root, text = "Input all the gratings set straight wavelength values in nm")
        self.input_label.grid(row = 0)
    
        self.core_string = "Core "

        self.label_col_inc = 0
        self.entry_col_inc = 1
        self.core_range = range(1, 5)

        for y in self.core_range:
            self.core_text = self.core_string + str(y) + '_' + '25'
            self.core_label = Label(root, text = self.core_text)
            self.entry = Entry(root)
            self.core_label.grid(row=1, column=self.label_col_inc, sticky=E)
            self.entry.grid(row=1, column=self.entry_col_inc)
            self.entries.append(self.entry)
            self.label_col_inc += 2
            self.entry_col_inc += 2
    
        self.threshold_label = Label(root, text = "Threshold in nm")
        self.entry_threshold = Entry(root)

        self.threshold_label.grid(row = 2, sticky = E)
        self.entry_threshold.grid(row = 2, column = 1)
    
        self.light_label = Label(root, text = 'Status')
        self.light_label.grid(row = 3, column = 3)

        self.canvas = Canvas(root, width = 150, height = 50)
        self.canvas.grid(row = 4, column = 3)
    
        # Green light
        self.green_light = turtle.RawTurtle(self.canvas)
        self.green_light.shape('circle')
        self.green_light.color('grey')
        self.green_light.penup()
        self.green_light.goto(0,0)

        # Red light
        self.red_light = turtle.RawTurtle(self.canvas)
        self.red_light.shape('circle')
        self.red_light.color('grey')
        self.red_light.penup()
        self.red_light.goto(40,0)
    
        self.data_button = Button(root, text = "Get data above threshold", command = self.getData)
        self.data_button.grid(row = 5, column = 0)



# function to receive TCP data blocks
    def getData(self):
        #start = timeit.default_timer()


        len_message = self.s.recv(4)
        print('len_message', len_message)
        #p = multiprocessing.Pool(processes = self.process_num)
        bytes_length = int(len_message.decode('utf-8'))  # for the self-made server
        recvd_data = self.s.recv(bytes_length)
        print('data', recvd_data)
        self.buff_data.put(recvd_data)
        #print('buffer', self.buff_data)
        self.t2.start()
        #self.t1.start()

        self.t2.join()
        #self.t1.join()


        
    def recvData(self):
        len_message = self.s.recv(4)
        print('len_message', len_message)
        while len_message:
            bytes_length = int(len_message.decode('utf-8'))  # for the self-made server
            recvd_data = self.s.recv(bytes_length)
            print('data', recvd_data)
            self.buff_data.put(recvd_data)
            #print('buffer', self.buff_data)
            len_message = self.s.recv(4)
            print('len_message', len_message)

        else:
            print('out of loop')
        self.s.close()


    def calculate_threshold(self):
        print('Calculating:')
        rmv_data = self.buff_data.get()
        stringdata = rmv_data.decode('utf-8')
        rep_str = stringdata.replace(",", ".")
        splitstr = rep_str.split()
        print('receiving')
        # received wavelength values
        inc = 34
        wav_threshold = []
        print('entries is', self.entries)
        for y in self.entries:
            print('0')
            print('y is', y)
            straight_wav = float(y.get())
            print('straight_wav', straight_wav)
            wav = float(splitstr[inc])
            print('2')
            wav_diff = wav - straight_wav
            print('3')
            if wav_diff < 0:
                wav_diff = wav_diff * (-1)
            wav_threshold.append(wav_diff)
            inc += 56

        threshold = float(self.entry_threshold.get())
        print('receiving2')
        # writing into the file
        data = []
        inc1 = 0
        col1 = 2
        col2 = 6

        data.insert(0, (str(splitstr[0])))
        data.insert(1, (str(splitstr[1])))

        for x in wav_threshold:
            if (x > threshold):
                self.red_light.color('red')
                self.green_light.color('grey')
                data.insert(col1, (str(splitstr[34 + inc1])))
                data.insert(col2,(str(x)))
            else:
                self.red_light.color('grey')
                self.green_light.color('green')
                data.insert(col1,'-')
                data.insert(col2,'-')
            inc1 += 56
            col1 += 1
            col2 += 1

        print('wiriting')
        self.write_file(data)



# function to write into the file
    def write_file(self,data):
        with open("Output.txt", "a") as text_file:
            text_file.write('\t'.join(data[0:]))
            text_file.write('\n')

if __name__ == '__main__':
    root = Tk()
    gui = GUI(root)
    root.mainloop()

КОД сервера

    
    
import socket
import threading
import os
    
def Main():
    host = '127.0.0.1'
    port = 5001
    s = socket.socket()
    s.bind((host,port))
    s.listen(5)
    print("Server started")
    
    while True:
        c,addr = s.accept()
        print("Client connected ip:<" + str(addr) + ">")
       
       
        c.sendall('1685 2020/03/02  14:42:05    318301  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
      
        c.sendall('1685 2020/03/03  14:42:05    318302  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
       
        c.sendall('1685 2020/03/04  14:42:05    318303  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
      
        c.sendall('1685 2020/03/05  14:42:05    318411  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())

   
       
        c.close()
    
    
if __name__ == '__main__':
    Main()
    

Но то, что я получаю, когда

len_message b'1685'
data b' 2020/03/02\t14:42:05\t318301\t4\t1\t25\t0\t0\t0\t0\t1513,094\t1516,156\t1519,154\t1521,969\t1525,029\t1527,813\t1530,921\t1533,869\t1536,740\t1539,943\t1542,921\t1545,879\t1548,843\t1551,849\t1554,760\t1557,943\t1560,782\t1563,931\t1566,786\t1569,751\t1572,690\t1575,535\t1578,638\t1581,755\t1584,759\t41\t39\t33\t39\t48\t44\t49\t55\t61\t58\t64\t55\t68\t74\t68\t59\t57\t74\t61\t68\t58\t64\t54\t47\t46\t2\t25\t0\t0\t0\t0\t1512,963\t1515,935\t1518,857\t1521,849\t1524,655\t1527,577\t1530,332\t1533,233\t1536,204\t1539,488\t1542,571\t1545,725\t1549,200\t1552,430\t1555,332\t1558,484\t1561,201\t1564,285\t1567,001\t1569,870\t1572,758\t1575,491\t1578,512\t1581,547\t1584,405\t48\t43\t37\t42\t57\t54\t59\t62\t67\t58\t71\t59\t77\t82\t82\t64\t71\t88\t77\t79\t72\t73\t63\t49\t50\t3\t25\t0\t0\t0\t0\t1513,394\t1516,517\t1519,536\t1522,082\t1525,428\t1527,963\t1531,288\t1534,102\t1536,659\t1539,757\t1542,707\t1545,627\t1548,389\t1551,459\t1554,406\t1557,986\t1560,667\t1564,103\t1567,036\t1570,144\t1573,189\t1575,888\t1579,185\t1582,323\t1585,338\t35\t36\t32\t37\t57\t58\t61\t64\t75\t73\t70\t62\t61\t62\t59\t51\t52\t64\t58\t62\t70\t70\t64\t54\t55\t4\t25\t0\t0\t0\t0\t1512,658\t1515,752\t1518,797\t1521,707\t1524,744\t1527,627\t1530,871\t1534,002\t1537,086\t1540,320\t1543,217\t1546,010\t1548,660\t1551,385\t1554,253\t1557,074\t1560,193\t1563,116\t1566,043\t1568,963\t1571,855\t1574,957\t1577,954\t1581,128\t1584,273\t43\t42\t39\t40\t56\t50\t56\t62\t65\t54\t59\t62\t75\t79\t73\t63\t67\t77\t73\t75\t68\t62\t54\t51\t51\t100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'
Calculating:
receiving
entries is [<tkinter.Entry object .!entry>, <tkinter.Entry object .!entry2>, <tkinter.Entry object .!entry3>, <tkinter.Entry object .!entry4>]
0
y is .!entry

, из-за чего дальнейшие вычисления не выполняются в функции calculate_threshold. Почему мое значение входа не то, что я ввожу, а.! Entry ?? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 июля 2020

<tkinter.Entry object .!entry> - это представление самого виджета, а не его содержимое.

В вашем коде self.entries - это список виджетов , а не список данных в виджетах. Если вы хотите увидеть список данных в виджетах, вы можете сделать что-то вроде этого:

print([entry.get() for entry in self.entries])
...