N1955688260 2023-04-10 14:46 采纳率: 18.8%
浏览 55
已结题

怎么将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

我应该怎么更改。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2023-04-10 15:53
    关注

    以下内容部分参考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输出的结果了。


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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月18日
  • 已采纳回答 4月11日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含