в части моего кода, мой скрипт генерирует строку, чтобы скопировать ее в виджет прокрученного текста. если размер строки не такой большой, этот процесс работает без каких-либо проблем, но когда строка тяжелая, сценарий не может вставить ее в виджет с прокруткой текста. когда это происходит, скрипт падает, и в терминале появляется сообщение об ошибке: unable to alloc 27 bytes
(это не исключительное событие).
до cra sh, я получил размер строки в байтах через sys.getsizeof
, и это было 230031360 байт (230 МБ).
в этих случаях пользователь может решить проблему, выбрав запись выходного сообщения в текстовый файл, но что делать, если пользователь пытается все равно писать толстую строку в виджете прокрученного текста? В этом конкретном случае c я бы очень хотел показать окно сообщения, чтобы посоветовать пользователю записать вывод в текстовый файл, но как я могу понять, может ли сценарий записывать строку в виджет с прокруткой текста или нет? каков лимит байтов строки в Python?
UPDATE:
Я написал пример, чтобы показать вам, где возникает проблема. главное окно будет сканировать sh через две минуты с сообщением об ошибке в терминале, unable to alloc 28 bytes
:
from tkinter import *
from tkinter import ttk, scrolledtext
import ipaddress
def GiveMeHosts():
ls = []
for host in ipaddress.ip_network("10.0.0.0/8").hosts():
ls.append(str(host))
return ls
parent = Tk()
parent.geometry("400x350")
parent.title("The window will crash..")
MyWidget=scrolledtext.ScrolledText(parent, wrap=WORD, width=36, height=14, font=("Segoe UI", 9), state="normal")
MyWidget.pack()
parent.update()
# the string "hosts" is too long, and "MyWidget" can't manage it!
hosts = "\n".join(GiveMeHosts())
MyWidget.insert("1.0", hosts) # it makes the script to crash
parent.mainloop()