json 在Tkinter输出框中显示多个API信息

idfiyjo8  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(199)

我有一个tkinter的应用程序,显示一些信息在一个文本小部件框。它从API收集数据,然后显示输出。如果我收集一点信息,它就能正常工作。但我试图显示多行信息。在python中使用以下代码可以很好地工作:

import sys
import requests
import urllib3
from requests.auth import HTTPBasicAuth
import json

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

#NetMRI Info
username = "test"
password = 'test'

DEVICE ='test_device'
url = 'https://test/api/3.7/infra_devices/search?DeviceName=' + DEVICE

#response Data
response = requests.get(url, auth=HTTPBasicAuth(username, password), verify=False)
data = response.json()

for ID in data['infra_devices']:
    print("Device ID= " + ID['DeviceID'], "DeviceModel= " + ID['DeviceModel'],sep='\n')

输出显示在控制台中,如:

设备ID= 324770
设备型号= ASR 1001 X
进程结束,退出代码为0

然后我有了tkinter应用程序的代码:

def button_get_info():
    d = device.get()

    url = 'https://test/api/3.7/infra_devices/search?DeviceName=' + d
    response = requests.get(url, auth=HTTPBasicAuth(username, password), verify=False)
    data = response.json()
    for ID in data['infra_devices']:
        print_out.insert("end-1c", "Device ID= " + ID['DeviceID'], "DeviceModel= " + ID['DeviceModel'])

但它只显示:

设备ID= 324770

它不显示其他行/输出。
先谢谢你了

f0ofjuux

f0ofjuux1#

insert方法接受一个索引、一个要打印的字符串、一个可选的标签,以及其他可选的字符串、标签组合(例如:insert(index, string, tag, string, tag, ...
当你执行print_out.insert("end-1c", "Device ID= " + ID['DeviceID'], "DeviceModel= " + ID['DeviceModel'])时,你传递了一个索引,然后又传递了两个参数。要打印的字符串是"Device ID= " + ID['DeviceID'],下一个参数被视为标记,因此它不会显示为文本。
一个简单的解决方案是在调用insert之前连接这两个字符串。为了使您的代码更容易测试,我建议创建字符串并将字符串作为单独的代码行插入,并使用f字符串而不是串联。

for ID in data['infra_devices']:
    s = f"Device ID= {ID['DeviceID']}\nDeviceModel= {ID['DeviceModel']}\n"
    print_out.insert("end-1c",s)

相关问题