python界面开发杂记

写在前面:

大概一个月前,从导师那里弄到了一个界面开发的小任务,使用python进行开发,主要是界面制作以及一些小功能的开发,今天开发初步完成,于是记录一下此次开发过程中的所学以备忘巩固。

编程新人...错误请指正,谢谢。

界面代码:

        由于功能代码不便流传,功能实现代码就不附上了,以下为界面图片及实现代码:

from tkinter import filedialog, Text
import matplotlib as mpl
import ttkbootstrap as ttk
from PIL import Image, ImageTk
from ttkbootstrap.constants import *

# 正常显示中文
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False


# 定义图片导入函数
def Import_pic():
    global file_path, a1, myPhoto2,myPhoto2_show
    file_path = filedialog.askopenfilename(title='Choose an image.', initialdir=('D:\PyCharm 2023.1\a_py_project'))
    b2.configure(state="able")
    myPhoto2 = Image.open(file_path)
    x, y = myPhoto2.size
    myPhoto2_show = myPhoto2.resize((canvas1.winfo_width(), int((canvas1.winfo_width() * y) / x)))#图片根据画布的大小等比例缩放
    myPhoto2_shows = ImageTk.PhotoImage(myPhoto2_show)
    canvas1.delete("all")   #删除画布上之前的图像
    canvas1.image = myPhoto2_shows
    canvas1.create_image((canvas1.winfo_width() / 2, canvas1.winfo_height() / 2), image=myPhoto2_shows)
    # (canvas1.winfo_width() / 2, canvas1.winfo_height() / 2)是位置信息,指图片中心在画布上的位置
    #canvas1.winfo_width() 获取画布canvas1 的真实宽度


def Measure_dis():
    # for widget in frame2.winfo_children():
    #     widget.destroy()
    #原用于销毁frame2框架控件代码,防止多测测量结果堆叠

    myPhoto3_shows = ImageTk.PhotoImage(myPhoto2_show)
    canvas2.delete("all")
    canvas2.image = myPhoto3_shows
    canvas2.create_image((canvas2.winfo_width() / 2, canvas2.winfo_height() / 2), image=myPhoto3_shows)  # 300,300是位置信息

    b2.configure(state="disable")

    canvas2.bind("<Enter>", aa1)
    canvas2.bind("<Button-1>", aa2)
    canvas2.bind("<Leave>", aa3)


def xFunc(event):
    return 0
def aa1(event):
    global line1    #标记线
    line1 = canvas1.create_line(0, 0, 0, 500, width=1, fill="red") #创建line1
def aa3(event):
    canvas1.delete(line1)   #删除line1
def aa2(event):
    line1_x, _, _, _ = canvas1.coords(line1)
    move_x = event.x - line1_x
    print(line1_x,event.x)
    canvas1.move(line1, move_x, 0) #line1移动

root = ttk.Window(title='预测测量', size=(1500, 900), position=(50, 50), themename="morph")
photo = ttk.PhotoImage(file='./3.png')
root.iconphoto(False, photo)    #设置窗口图标
# 创建框架,功能区
frame_1 = ttk.Frame(root, width=960, height=60, bootstyle=LIGHT)
frame_1.pack(side=TOP, padx=0, pady=0, fill=ttk.X)  # 自动调节组件自身的尺寸
# 创建框架,工作区
frame_2 = ttk.Frame(root)
frame_2.pack(side=TOP, padx=5, pady=0, fill=ttk.BOTH, expand=True)
frame1 = ttk.LabelFrame(frame_2, text="原始图")  # 待分析图片显示位置
frame1.place(relx=0.025, rely=0.05, relheight=0.9, relwidth=0.45)
frame2 = ttk.LabelFrame(frame_2, text="预测曲线")  # 预测曲线显示位置
frame2.place(relx=0.525, rely=0.05, relheight=0.9, relwidth=0.45)
# 创建框架,辅助信息区
frame_3 = ttk.Frame(root, width=960, height=180)
frame_3.pack(side=BOTTOM, fill=ttk.X)

xVariable = ttk.StringVar()  #创建变量,便于取值

com = ttk.Combobox(frame_1, textvariable=xVariable)  # 创建下拉菜单
com.pack(side=LEFT, padx=50, pady=10)  # #将下拉菜单绑定到窗体
com["value"] = ("C扫", "相控阵")  # #给下拉菜单设定值
com.current(0)  # 设定下拉菜单的默认值
com.bind('<<ComboboxSelected>>', xFunc)

b1 = ttk.Button(master=frame_1, text='导入图片', width=12, command=Import_pic)  # 导入图片按钮
b1.pack(side=LEFT, padx=20, pady=10)
b2 = ttk.Button(master=frame_1, text='测量宽度', width=12, command=Measure_dis)  # 图片分析按钮,未导入前禁用,分析完成后禁用
b2.pack(side=LEFT, padx=20, pady=10)
b2.configure(state="disabled")

bg1 = Image.open("bg1.png")  # 导入初始背景图
bg_1 = ImageTk.PhotoImage(bg1)

# 创建画布
canvas1 = ttk.Canvas(frame1)  # 画布的位置和大小
canvas1.create_image(300, 300, image=bg_1)  # 300,300是位置信息
canvas1.pack(side=LEFT, padx=10, pady=10, fill=BOTH, expand=True)

sep = ttk.Separator(frame_2, orient=VERTICAL, bootstyle=DARK)  # 分隔线
sep.place(relx=0.5, rely=0.03, relheight=0.97)

bg2 = Image.open("bg2.png")  # 导入初始背景图
bg_2 = ImageTk.PhotoImage(bg2)
#创建画布
canvas2 = ttk.Canvas(frame2)  # 画布的位置和大小
canvas2.create_image(300, 300, image=bg_2)  # 300,300是位置信息
canvas2.pack(side=LEFT, padx=10, pady=10, fill=BOTH, expand=True)

text = Text(frame_3, height=10)  # 交互文本框,padding=5, autohide=True
text.place(relx=0.025, rely=0.05, relheight=0.7, relwidth=0.8)

xiao_hui_1 = Image.open("3.png")  # 导入校徽
xh1 = ImageTk.PhotoImage(xiao_hui_1)
canvas3 = ttk.Canvas(frame_3, width=180, height=120)  # 画布的位置和大小
canvas3.create_image(130, 60, image=xh1)  # 300,300是位置信息
canvas3.create_text(30, 10, text="  Auothor:")
canvas3.place(relx=0.85, rely=0.05)

root.update()

root.mainloop()  # 进入主事件循环

函数&模块:

        这一部分我将叙述我在界面开发过程中的学习及认知,慢慢写...

一、ttkbootstrap部分:

        导入ttkbootstrap模块: 

import ttkbootstrap as ttk
from ttkbootstrap import *

1.Frame容器:

          frame容器的主要作用是容纳和约束其他控件,以便规划界面,使界面更加美观,其本身常用属性为,width(宽),height(高),bootstyle(样式),relief(框架外框样式)等。

frame1 = ttk.Frame(root, width=960, height=60, bootstyle=LIGHT)
#在root窗口中创建容器frame1,宽960像素,高60像素,背景:LIGHT

frame1.pack() 
#将frame1绑定在它的父容器上,自动调节尺寸位置

2.Button

b1 = ttk.Button(master=frame1, text='导入图片', width=12, command=Import_pic,                         
                     bootstyle="sussess")
#在frame1容器中创建按钮b1,绑定事件Import_pic

b1.pack(side=LEFT, padx=20, pady=10)    #button绑定带frame1上

b1.configure(state="disabled")    #b1按钮设置禁用,state="able",恢复使用

先写到这了,之后慢慢补充...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值