怎么将print中的结果显示在tkinter界面上

我想在我的tkinter界面上显示我print出的结果,但是我不知道怎么改。
在网上查的,也没有查到说的清楚点的。
下面是我的代码:

import tkinter as tk
import tensorflow as tf
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
from tkinter import *
import tkinter.filedialog  # 注意次数要将文件对话框导入
from PIL import Image
from tensorflow.python.keras import models, layers

def CNN_yuce():
    global e1, pred, root,predict_class
    name_dict = {"Uninfected":0, "Parasitized":1}

    fig = plt.figure(figsize=(2,2),dpi=100)
    # 从本地选择一个文件,并返回文件的目录
    # filenames = tkinter.filedialog.askopenfile()#形成一共io流 的文件名称
    filename = tk.filedialog.askopenfilename(title=u'加载图片',initialdir=(()))#只保留文件名和后缀
    print(filename)

    # model_save_path = 'D:/ningyupeng/pythonProject/Graduation Project V1.0/my_model/variables/variables.ckpt'

    model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(),#Flatten-变成一维数组
        tf.keras.layers.Dense(128, activation='relu'),#relu函数可以解决 梯度消失问题 是线性的
        tf.keras.layers.Dense(2, activation='softmax')])# 2个类所以2个神经元 softmax只用在最后一层 可以让最后输出的概率在0-1之间

    # model.load_weights('checkpoint-05e-val_acc_0.58.hdf5')#读取文件
    models.load_model("my_model")

    # 加载测试图片
    img = Image.open(filename)
    # 将图片resize到224x224大小
    img = img.resize((128, 128), Image.ANTIALIAS)
    # 将灰度图转化为RGB模式
    img = img.convert("RGB")

    plt.imshow(img)
    # 归一化
    img1 = np.array(img) / 255.
    # 将图片增加一个维度,目的是匹配网络模型
    img1 = (np.expand_dims(img1, 0))
    # 将预测结果转化为概率值
    result = np.squeeze(model.predict(img1))
    predict_class = np.argmax(result)
    # pred = tf.argmax(result, axis=1)#求最大值得出最后识别出来的数
    # print(inverse_dict[int(predict_class)],result[predict_class])
    # 将预测的结果打印在图片上面
    # plt.title([inverse_dict[int(predict_class)],result[predict_class]])
    print(result)

    result = np.argmax(result[0])  # 取出预测结果中概率最大的元素索引值
    for k, v in name_dict.items():  # 将类别由数字转换为名称
        if result == v:  # 如果预测结果等于v, 打印出名称
            print("预测结果:", k)  # 打印出名称

    e1 = tk.Label(root, text=pred, font=('Arial', 16))#显示预测结果
    e1.place(x=500, y=370)

    canvas = FigureCanvasTkAgg(fig, master=root)#渲染器 在画布上放置图片
    canvas.draw()
    canvas.get_tk_widget().place(x=550,y=50)
def picture():
    global root
    root = Tk()
    root.wm_title("细胞图像疟疾检测")
    root.geometry('1000x650')

    ask = tk.Button(root, text="预测", width=10, command=CNN_yuce)
    ask.place(x=600, y=90)

    root.mainloop()

if __name__ == '__main__':
    picture()




它运行后print的结果不在界面上,下面是print结果截图,和界面的截图。

img

img

我应该怎么更改。

以下内容部分参考ChatGPT模型:


将print输出的结果显示在tkinter界面上,可以使用tkinter的Label组件来实现。在CNN_yuce函数中,可以创建一个Label组件并将print输出的结果赋值给它的text属性,然后将该组件放置在界面上即可。例如:

def CNN_yuce():
    global e1, pred, root,predict_class
    name_dict = {"Uninfected":0, "Parasitized":1}

    ...

    # 将预测结果转化为概率值
    result = np.squeeze(model.predict(img1))
    predict_class = np.argmax(result)
    print(result)

    result = np.argmax(result[0])  # 取出预测结果中概率最大的元素索引值
    for k, v in name_dict.items():  # 将类别由数字转换为名称
        if result == v:  # 如果预测结果等于v, 打印出名称
            print("预测结果:", k)  # 打印出名称

    # 创建Label组件并将预测结果赋值给它的text属性
    pred = "预测结果:" + k
    e1 = tk.Label(root, text=pred, font=('Arial', 16))
    e1.place(x=500, y=370)

    ...

这样就可以在界面上显示print输出的结果了。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

  • 这篇博客: 使用tkinter打造一个小说下载器,想看什么小说,就下什么中的 先设计一个图像化的界面 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码

    from tkinter import *
    
    root = Tk()
    root.title('小说下载器')
    root.geometry('560x450+400+200')
    
    label = Label(root, text='请输入下载小说名字:', font=('华文行楷', 20))
    label.grid()
    
    entry = Entry(root, font=('隶书', 20))
    entry.grid(row=0, column=1)
    
    text = Listbox(root, font=('隶书', 16), width=50, heigh=15)
    text.grid(row=2, columnspan=2)
    
    button1 = Button(root, text='开始下载', font=('隶书', 15), command=search)
    button1.grid(row=3, column=0)
    
    button2 = Button(root, text='退出程序', font=('隶书', 15), command=root.quit)
    button2.grid(row=3, column=1)
    
    root.mainloop()

    效果如下图