Исключение в обратном вызове Tkinter при передаче данных между классамиPython

Программы на Python
Anonymous
Исключение в обратном вызове Tkinter при передаче данных между классами

Сообщение Anonymous »

Я пишу приложение для чтения внутреннего журнала на Python 3.12 и столкнулся с проблемой, когда код, который работает нормально, не работает внутри классов. У меня есть один класс, который считывает байты файлов журналов в словарь и сохраняет их в виде байтов, примерно так:

Код: Выделить всё

class Logs:
def __init__(self, archive_file):
self.files = {'audit.log': b'1\t2024-08-04 12:00:12\tuser\tmessage\n2\t2024-08-04 12:00:13\tuser\tmessage2\n_etc.',
'system.log': b'1\t2024-08-04 12:00:12\tuser\tmessage\n2\t2024-08-04 12:00:13\tuser\tmessage\n_etc'}
У меня есть другие классы, которые создают пользовательский интерфейс с помощью tkinter и используют эти данные. Один из них предназначен для фактического просмотра журнала, но когда я пытаюсь загрузить и использовать данные в начале класса, я получаю «Исключение в обратном вызове Tkinter», и переменная считается объектом noneType. Вот начало этого класса с переменной data, являющейся словарем выше:

Код: Выделить всё

class logsNotebook(ttk.Notebook):
def __init__(self, data, parent, ui):
super().__init__(parent)
if ui.logs_button.cget("style") != "AccentButton":
ui.logs_button.configure(style="AccentButton")
ui.general_button.configure(style='')
ui.network_button.configure(style='')
ui.config_button.configure(style='')

tab1 = Frame(self)
tab2 = Frame(self)

self.add(tab1, text="System Log")
self.add(tab2, text="Audit Log")

self.pack(expand=True, fill="both")

### System Log ###############################################################
file = data.files['system.log'].decode('utf-8')
lines = []
for line in file.splitlines():
lines.append(line)

print(len(lines))
print(lines[-1])
Операторы печати никогда не выполняются в терминале. Сначала я получаю «Исключение в обратном вызове Tkinter».
Файлы находятся в правильном месте, код tkinter для кнопок и блокнота работает, а данные успешно считываются в память в основная программа. Фактически, если я просто читаю файл в начале урока, он работает нормально. Если я заменю раздел системного журнала следующим:

Код: Выделить всё

          with open("system.log", "r") as f:
lines = f.readlines()

print(len(lines))
print(lines[-1])
тогда я не получаю ошибку. Однако я стараюсь избегать работы с файлами на диске и просто использовать их, загруженные в память с помощью приведенного выше словаря.
Если я напишу программу test.py, которая делает то же самое, она тоже успешно работает:

Код: Выделить всё

import Logs

my_path = 'C:/Scripts/Python/testdata/system.log'

data = logs(my_path) #In the real code this is just grabbing the dictionary above

file = data.files['system.log'].decode('utf-8')
lines = []
for line in file.splitlines():
lines.append(line)

print(len(lines))
print(lines[-1])
Похоже, мне чего-то не хватает при передаче данных между классами, но, несмотря на поиск в Google и приведенные выше тесты, пытающиеся это выяснить, я в тупике.

Подробнее здесь: https://stackoverflow.com/questions/788 ... en-classes

Вернуться в «Python»