这个醒目主要记录使用Python来完成一些图形化界面的设计和实现
*首先来写一个最简单的图形化界面的代码看看效果
from tkinter import *
root= Tk()
root.title('我的第一个Python窗体')
root.geometry('240x240') # 这里的乘号不是 * ,而是小写英文字母 x
root.mainloop()
生成的第一个图形化的界面如下图所示:
控件 | 名称 | 作用 |
---|---|---|
Button | 按钮 | 单击可以触发相应的事件 |
Canvas | 画布 | 绘制图形或绘制特殊控件 |
Checkbutton | 复选框 | 多项选择 |
Entry | 输入框 | 接收单行文本输入 |
Frame | 框架 | 用于控件分组 |
Label | 标签 | 单行文本显示 |
Lisbox | 列表框 | 显示文本列表 |
Menu | 菜单 | 创建菜单命令 |
Message | 消息 | 多行文本标签,与Label 用法类似 |
Radiobutton | 单选按钮 | 从互斥的多个选项中做单项选择 |
Scale | 滑块 | 默认垂直方向,鼠标拖动改变数值形成可视化交互 |
Scrollbar | 滑动条 | 默认垂直方向,课鼠标拖动改变数值,可与 Text、Lisbox、Canvas等控件配合移动可视化空间 |
Text | 文本框 | 接收或输出显示多行文本 |
Toplevel | 新建窗体容器 | 在顶层创建新窗体 |
- 将一个 Python 函数或方法绑定到一个 Button 控件. 这个函数或方法将在按钮被点击时执行,这样我们就可以实现交互
button控件的一些参数代表的意思及用法。activebackground, activeforeground:{类型:颜色;说明:当按钮被激活时所使用的颜色},background (bg), foreground (fg):{类型:颜色;说明:按钮的颜色。默认值与特定平台相关},borderwidth (bd):{类型:整数;说明:按钮边框的宽度。默认值与特定平台相关。但通常是1或2象素},command:{类型:回调;说明:当按钮被按下时所调用的一个函数或方法。所回调的可以是一个函数、方法或别的可调用的Python对象}
通常button控件都是与某些回调函数连用,以实现交互的效果。 假设我们需要当用户点击按钮后弹出一个对话框的需求
from tkinter import *
from tkinter.messagebox import *
root= Tk()
def printmessagr():
showinfo(title='提示', message='您点击了按钮')
bt=Button(root,text="点击我",command=printmessagr)
bt.pack()
root.title('我的第一个Python窗体')
root.geometry('240x240') # 这里的乘号不是 * ,而是小写英文字母 x
root.mainloop()
此段代码生成后的效果图如下所示:
同样的我们还可以设置一些更加复杂的回调函数。
我们可以写一个简单的计算器小程序。
from tkinter import *
def add_nonpar():
a = float(inp1.get())
b = float(inp2.get())
s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
txt.insert(END, s) # 追加显示运算结果
inp1.delete(0, END) # 清空输入
inp2.delete(0, END) # 清空输入
def add_havepar(x,y):
a = float(x)
b = float(y)
s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
txt.insert(END, s) # 追加显示运算结果
inp1.delete(0, END) # 清空输入
inp2.delete(0, END) # 清空输入
def mlu():
a = float(inp1.get())
b = float(inp2.get())
s = '%0.2f-%0.2f=%0.2f\n' % (a, b, a - b)
txt.insert(END, s) # 追加显示运算结果
inp1.delete(0, END) # 清空输入
inp2.delete(0, END) # 清空输入
def cheng():
a = float(inp1.get())
b = float(inp2.get())
s = '%0.2f*%0.2f=%0.2f\n' % (a, b, a * b)
txt.insert(END, s) # 追加显示运算结果
inp1.delete(0, END) # 清空输入
inp2.delete(0, END) # 清空输入
def chu():
a = float(inp1.get())
b = float(inp2.get())
s = '%0.2f÷%0.2f=%0.2f\n' % (a, b, a / b)
txt.insert(END, s) # 追加显示运算结果
inp1.delete(0, END) # 清空输入
inp2.delete(0, END) # 清空输入
root = Tk()
lb_1=Label(root,text="请输入您想要计算的两个数字:")
#place中参数的意思是,relx代表相对于窗体的相对水平起始位置,
#rely代表相对于窗体的垂直起始位置。relwidth意思是相对于窗体的宽度为0.8
#relheight代表相对于窗体高度为0.1
#相对应的这些参数如果是x,y,width,heigh代表的意思是绝对位置和绝对高度和宽度。
lb_1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
#创建两个输入框
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)
inp2 = Entry(root)
inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
#创建加法按钮组件.当回到函数无参数传入的时候
btn1 = Button(root, text='无参数传入的加法运算', command=add_nonpar)
btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)
#创建加法按钮组件.当回到函数有参数传入的时候
btn2 = Button(root, text='有参数传入的加法运算', command=lambda:add_havepar(inp1.get(),inp2.get()))
btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
#创建减法按钮组件.
btn3 = Button(root, text='减法运算', command=mlu)
btn3.place(relx=0.1, rely=0.5, relwidth=0.3, relheight=0.1)
#创建乘法按钮组件.
btn3 = Button(root, text='乘法运算',command=cheng )
btn3.place(relx=0.1, rely=0.6, relwidth=0.3, relheight=0.1)
#创建除法按钮组件.
btn3 = Button(root, text='除法运算', command=chu)
btn3.place(relx=0.1, rely=0.7, relwidth=0.3, relheight=0.1)
#创建一个文本框用来显示计算得到的结果
txt = Text(root)
txt.place(relx=0.1,rely=0.8, relheight=0.3)
root.geometry('800x400')
root.title('四则运算计算器')
root.mainloop()
最后的效果图如下所示:
假如我想要使用text控件来实现将文本框中的内容作为文件保存到指定文件夹中。实现的功能类似于notepad
效果图如下图所示:
制作一个文件选择对话框,并将选择的图片显示在图形化界面中
生成的效果如下图所示: