У меня есть файл json с именами, адресом электронной почты, фамилией и т. Д. Я пытаюсь поместить данные в текстовое поле в tkinter.

Я попытался использовать Label следующим образом:

with open('file.json','r') as inside:
    data = json.load(inside)

Label(Interface, text=data).place(x=100,y=100)

То, что произошло сейчас, это то, что была только 1 строка со всей информацией, и она не была читаемой, поэтому я решил использовать текстовое поле.

Text(Interface, state='normal',height = 20, width = 60).place(x=10,y=350)
Text.insert(INSERT,data)

Теперь я получаю ошибку:

TypeError: insert() missing 1 required positional argument: 'chars'

Я читал, что требуется только 2 аргумента, но я попробовал с 3:

Text.insert(INSERT,data,"test")

Я получаю ошибку:

AttributeError: 'str' object has no attribute 'tk'

Я не знаю, что я делаю не так в этом случае ..

1
Number70 27 Май 2019 в 21:29

2 ответа

Лучший ответ

Я не могу воспроизвести проблему, о которой вы говорите. Следующий исполняемый пример работает с отображением данных JSON в файле:

import json
from tkinter import *


json_filename = 'inside.json'

Interface = Tk()

with open(json_filename, 'r') as inside:
    data = json.load(inside)

text = Text(Interface, state='normal', height=20, width=60)
text.place(x=10, y=50)
text.insert('1.0', str(data))

Interface.mainloop()
1
martineau 27 Май 2019 в 20:49

Проблема в этой строке кода:

Text.insert(INSERT,data,"test")

Вы вызываете метод класса, который ожидает три аргумента: экземпляр, индекс и данные для ввода.

Вместо этого вам нужно вызывать insert в экземпляре :

text = Text(Interface, state='normal',height = 20, width = 60)
text.place(x=10,y=350)
...
text.insert(INSERT, data)

Примечание: обязательно, чтобы вы сохранили ссылку на текстовый виджет и чтобы вы не вызывали place (или pack или grid) в той же строке (например: текст (...). место (...) `.

1
Bryan Oakley 27 Май 2019 в 22:06