Как читать текстовый файл и анализировать данные для отображения в графическом интерфейсе tkinter - PullRequest
1 голос
/ 02 ноября 2019

Я довольно новичок в Python и мне нужна помощь. Мне нужно прочитать все значения из текстового файла и отобразить его в графическом интерфейсе. TXT-файл, который я выбираю в качестве файловой операции, необходимой как требование, поэтому я выбираю текстовый файл для хранения словаря. Я использую Python 3 и был бы признателен за помощь.

from tkinter import *
#read the file
file = open("./ppl.txt", "r")
courses = file.readlines()
print(courses)

root = Tk()

for course in courses:
    temp_text = courses
    Label(root, text=temp_text).pack()

mainloop()

TXT-файл (ppl.txt):

people = {1: {'Name': 'John', 'Age': '27', 'Sex': 'Male'},
          2: {'Name': 'Marie', 'Age': '22', 'Sex': 'Female'}}

Теперь графический интерфейс показывает грязный формат:

scrrenshot of messy output being displayed

Я бы хотел, чтобы это было в примере с графическим интерфейсом:

Name: John, Age:27, Sex: Male
Name: Marie, Age:22, Sex: Female

1 Ответ

0 голосов
/ 02 ноября 2019

Вот способ сделать это, который включает использование встроенной функции runpy.run_path() для выполнения текстового файла, как если бы он был модулем Python, и возвращает словарь глобальных модулей, , которыйпотенциальная угроза безопасности при ненадежном вводе .

После выполнения кода в текстовом файле он получает определенный словарь объект и форматирует его содержимое в список строк, которые впоследствии используются для создания Label виджетов.

import runpy
from tkinter import *

filepath = "./ppl.txt"

# Execute file as python module and get the module globals dictionary defined.
mod_dict = runpy.run_path(filepath, {'__builtins__': None})
people = mod_dict['people']  # Retrieve dictionary defined.

# Format dictionary data into separate lines.
lines = []
for person in people.values():
    line = ', '.join('{}: {}'.format(key, value) for (key, value) in person.items())
    lines.append(line)

root = Tk()

for line in lines:
    Label(root, text=line).pack(anchor=W)

mainloop()

Результат:

screenshot of data displayed in tkinter window

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...