将上面的程序的上位机界面改得更美观
时间: 2024-02-22 21:00:21 浏览: 147
要将界面改得更美观,可以考虑使用 tkinter 的 ttk 模块,它提供了更多样式和控件,可以让界面看起来更现代化。以下是一个改进版的代码示例:
```python
from PIL import Image
import tkinter as tk
from tkinter import ttk
def show_results(results):
# 创建子界面
win = tk.Toplevel()
win.geometry("500x400")
win.title("预测结果")
# 创建表格
table = ttk.Treeview(win, columns=["x", "y", "w", "h", "class"], show="headings")
table.pack(fill="both", expand=True)
# 设置表头
table.heading("x", text="X")
table.heading("y", text="Y")
table.heading("w", text="W")
table.heading("h", text="H")
table.heading("class", text="类别")
# 填充表格内容
for i, s1 in enumerate(results):
table.insert("", "end", values=s1[:5])
# 创建选择按钮
select_button = ttk.Button(table, text="选择", command=lambda s=s1: select_result(s))
table.window_create(table.identify_row(i), column=5, window=select_button)
# 定义选择结果函数
def select_result(result):
print("选择的是:", result)
def site(source, pred, names):
img = Image.open(source)
x1, x2 = img.size
print([x1, x2])
results = []
for i1 in pred:
s = []
for i2 in i1.data.cpu().numpy():
s1 = []
s = list(i2)
# 获取预测框中心点的坐标
x = s[0] = float(round((s[0] + s[2]) / 2 / x1, 4))
y = s[1] = float(round((s[1] + s[3]) / 2 / x2, 4))
# 预测框的宽和高
w = s[2] - s[0]
h = s[3] - s[1]
s1.append(str(x))
s1.append(str(y))
s1.append(str(w))
s1.append(str(h))
s1.append(names[int(s[5])])
if s[4] < 0.5:
break
results.append(s1)
return results
# 创建 GUI 界面
window = tk.Tk()
window.geometry("400x400")
window.title("预测结果展示")
# 创建主界面控件
main_frame = ttk.Frame(window)
main_frame.pack(fill="both", expand=True, padx=10, pady=10)
# 创建提示信息标签
ttk.Label(main_frame, text="请选择图像:").grid(row=0, column=0, sticky="w")
# 创建图像选择框
image_entry = ttk.Entry(main_frame, width=30)
image_entry.grid(row=1, column=0, padx=5, pady=5, sticky="w")
# 创建预测按钮
predict_button = ttk.Button(main_frame, text="预测")
predict_button.grid(row=1, column=1, padx=5, pady=5, sticky="e")
# 创建类别选择框
ttk.Label(main_frame, text="请选择类别:").grid(row=2, column=0, sticky="w")
class_combo = ttk.Combobox(main_frame)
class_combo.grid(row=3, column=0, padx=5, pady=5, sticky="w")
# 创建结果展示按钮
show_button = ttk.Button(main_frame, text="展示结果")
show_button.grid(row=3, column=1, padx=5, pady=5, sticky="e")
# 创建确定按钮
confirm_button = ttk.Button(main_frame, text="退出", command=window.quit)
confirm_button.grid(row=4, column=1, padx=5, pady=5, sticky="e")
# 获取类别列表
class_list = ["类别1", "类别2", "类别3"]
class_combo["values"] = class_list
# 绑定预测按钮事件
def predict_button_click():
source = image_entry.get()
pred = [] # 这里省略了获取预测结果的代码
results = site(source, pred, class_list)
print(results)
predict_button["command"] = predict_button_click
# 绑定展示结果按钮事件
def show_button_click():
class_name = class_combo.get()
results = [] # 这里省略了获取预测结果的代码
show_results([r[:4]+[class_name] for r in results if r[4] == class_name])
show_button["command"] = show_button_click
# 运行界面程序
window.mainloop()
```
在这个改进版的程序中,我们使用了 ttk 模块提供的 Treeview 控件来展示表格,使用了 Combobox 控件来创建类别选择框,并将界面中所有控件放置在一个主界面控件中,以便更好地控制其位置和大小。同时,我们还对各个控件的布局进行了微调,使得整个界面看起来更加美观和现代化。
阅读全文