https://www.cnblogs.com/buchizaodian/category/1035298.html
https://blog.csdn.net/rng_uzi_/article/details/89792518
https://blog.csdn.net/Fighting_Boom/article/details/81268074
import tkinter as tk
import tkinter.font as tf
enter_w = tk.Tk()
enter_w.title('Test') #设置标题
enter_w.geometry('750x500')#设置窗体大小
ft = tf.Font(family='华文隶书', size=40,weight=tf.BOLD,slant=tf.ITALIC,\
underline=1,overstrike=1) #设置字体
Lab = tk.Label(enter_w ,text='测试字体文字',fg ="white",bg = '#0000cd',\
font = ft,compound='center')
Lab.pack() #设置label显示
enter_w.mainloop()
(1)python tkinter-窗体
1.导入自带的包名
import tkinter
2.创建一个窗体对象
form=Tkinter.Tk()
3.显示窗体(这句应该是所有的设置部署完最后执行的一句代码)
form.mainloop()
运行
这个窗体关闭后,才会执行后面的代码。
4.更换窗体标题tk
form.title('GUI')
5.窗体图标设置
form.iconbitmap('e:\python.ico')
6.设置窗体大小
form.geometry('800x600')
7.固定窗体大小
root.resizable(False, False)
下面是全写:
root.resizable(width = False, height = False)
无法最大化,也无法拖动变换窗体大小
tkinter 控件明细
控件 | 描述 |
---|---|
Button | 按钮控件;在程序中显示按钮。 -------------有 |
Canvas | 画布控件;显示图形元素如线条或文本 |
Checkbutton | 多选框控件;用于在程序中提供多项选择框 |
Entry | 输入控件;用于显示简单的文本内容 |
Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件;可以显示文本和位图 --------有 |
Listbox | 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 |
Menubutton | 菜单按钮控件,由于显示菜单项。 |
Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 |
Message | 消息控件;用来显示多行文本,与label比较类似 |
Radiobutton | 单选按钮控件;显示一个单选的按钮状态 |
Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 |
Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框。. |
Text | 文本控件;用于显示多行文本 |
Toplevel | 容器控件;用来提供一个单独的对话框,和Frame比较类似 |
Spinbox | 输入控件;与Entry类似,但是可以指定输入范围值 |
PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 |
LabelFrame | labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 |
tkMessageBox | 用于显示你应用程序的消息框。 ????? |
控件通用属性
属性 | 描述 |
Dimension | 控件大小; |
Color | 控件颜色; |
Font | 控件字体; |
Anchor | 锚点; |
Relief | 控件样式; |
Bitmap | 位图; |
Cursor | 光标; |
(2)python tkinter-按钮.标签.文本框、输入框
按钮
无功能按钮
Button的text属性显示按钮上的文本
tkinter.Button(form, text='hello button').pack()
无论怎么变幻窗体大小,永远都在窗体的最上行的居中位置
点击触发事件
Button 的 command属性调用方法,来执行事件
例如有个方法
def a():
print ('已点击按钮')
tkinter.Button(form, text='hello button',command=a).pack()
点击3次按钮,执行了3次 a方法
设置按钮的宽、高 width,height 属性
方法一
tkinter.Button(form, text='hello button',width=10,height=1).pack()
或者(注意第一行没有.pack())
当
t1=tkinter.Button(form, text='button')
方法二
t1['width']=20
t1['height']=2
t1.pack()
方法三
t1.configure(width = 30,height = 3)
t1.pack()
按钮状态 state 属性
默认是 NORMAL,还有一个状态是active目前不知道什么作用
禁用
tkinter.Button(form, text='hello button',width=10,height=1,state=tkinter.DISABLED).pack()
按钮的前景色与背景色
fg: 前景色(字体颜色)
tkinter.Button(form, text='hello button',width=10,height=1,fg='red').pack()
bg:背景色
tkinter.Button(form, text='hello button',width=10,height=1,bg='blue').pack()
文本在按钮上的显示位置
属性 anchor
它的值有这8个方向
n(north),s(south),w(west),e(east)和ne,nw,se,sw,
已西北方向为例子
tkinter.Button(form, text='hello button',width=20,height=5,anchor='nw').pack()
按钮风格
属性 relief
tkinter.Button(form, text='hello button', relief=FLAT).pack()
测试没成功。。。。。。????
标签Label
lab1=tkinter.Label(form,text='标签:').pack()
文本框 text
t1=tkinter.Text(form,width = 10,height = 1).grid(row=0,column=1)
给文本框赋值
t1.insert(1.0,'abc')
那个1.0是什么意思,暂时不懂
取出文本框的值
输入框 Entry
给输入框赋值初始值
绑定tkinter.StringVar()后 set()
t1 = tkinter.StringVar()
t1.set('春季里那个百花开')
entry = tkinter.Entry(root, textvariable = t1).pack()
print (t1.get())
获取输入框的值 t1.get() 并打印
(3)python tkinter-消息框、对话框、文件对话框
消息框
导入
import tkinter
import tkinter.messagebox #这个是消息框,对话框的关键
提示消息框
tkinter.messagebox.showinfo('提示','人生苦短')
消息警告框
tkinter.messagebox.showwarning('警告','明日有大雨')
错误消息框
tkinter.messagebox.showerror('错误','出错了')
import tkinter
import tkinter.messagebox
def but():
tkinter.messagebox.showinfo('提示', '人生苦短')
#tkinter.messagebox.showwarning('警告', '明日有大雨')
#tkinter.messagebox.showerror('错误', '出错了')
root=tkinter.Tk()
root.title('GUI')#标题
root.geometry('800x600')#窗体大小
root.resizable(False, False)#固定窗体
tkinter.Button(root, text='hello button',command=but).pack()
root.mainloop()
对话框
同样需要导入 tkinter.messagebox
import tkinter
import tkinter.messagebox
def but():
a=tkinter.messagebox.askokcancel('提示', '要执行此操作吗')
print (a)
root=tkinter.Tk()
root.title('GUI')#标题
root.geometry('800x600')#窗体大小
root.resizable(False, False)#固定窗体
tkinter.Button(root, text='hello button',command=but).pack()
root.mainloop()
点击
确定返回 Ture
取消返回 False
messagebox.askquestion
a=tkinter.messagebox.askquestion('提示', '要执行此操作吗')
返回 yes 和 no
messagebox.askyesno
a=tkinter.messagebox.askyesno('提示', '要执行此操作吗')
返回 Ture 和 False
messagebox.askretrycancel
a=tkinter.messagebox.askretrycancel('提示', '要执行此操作吗')
返回 Ture 和 False
a=tkinter.messagebox.askyesnocancel('提示', '要执行此操作吗')
这个有三个按钮
是:True
否:False
取消:None
filedialog 文件对话框
用来获取文件路径和文件名
import tkinter.filedialog
a=tkinter.filedialog.askopenfilename()
输出a得到文件路径和名字
E:/1.txt
(4)python tkinter-布局
包装布局pack()
目前对它的感觉是,当一个窗体的对象都设置完属性后,最后用它来绑定到窗体上。之后就不能再设置属性了
名称 | 描述 | 取值范围 |
expand | 当值为“yes”时,side选项无效。组件显示在父配件中心位置;若fill选项为”both”,则填充父组件的剩余空间。 | “yes”, 自然数, “no”, 0 (默认值为“no”或0) |
fill | 填充x(y)方向上的空间,当属性side=”top”或”bottom”时,填充x方向;当属性side=”left”或”right”时,填充”y”方向;当expand选项为”yes”时,填充父组件的剩余空间。 | “x”, “y”, “both” (默认值为待选) |
ipadx, ipady | 组件内部在x(y)方向上填充的空间大小,默认单位为像素,可选单位为c(厘米)、m(毫米)、 i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。 | 非负浮点数 (默认值为0.0) |
padx, pady | 组件外部在x(y)方向上填充的空间大小,默认单位为像素,可选单位为c(厘米)、m(毫米)、 i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。 | 非负浮点数 (默认值为0.0) |
side | 定义停靠在父组件的哪一边上。 | “top”, “bottom”, “left”, “right” (默认为”top”) |
before | 将本组件于所选组建对象之前pack,类似于先创建本组件再创建选定组件。 | 已经pack后的组件对象 |
after | 将本组件于所选组建对象之后pack,类似于先创建选定组件再本组件。 | 已经pack后的组件对象 |
in_ | 将本组件作为所选组建对象的子组件,类似于指定本组件的master为选定组件。 | 已经pack后的组件对象 |
anchor | 对齐方式,左对齐”w”,右对齐”e”,顶对齐”n”, 底对齐”s” | “n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center” (默认为” center”)
|
expand属性
控件会显示在窗体的正中位置
默认是'no'
1
t1=tkinter.Button(form, text='button')
t1.configure(width = 30,height = 3)
t1.pack(expand="YES")
这个正中要多说两句:意思是如果有其他控件的化,就是剩余空间的正中位置。
PS:其他的控件会肯定是会按正行的占空间
2
如果联合 fill属性的'both' 它会把所有的剩余控件全部填满
t1.pack(expand="YES" ,fill='both')
side属性
它贴在窗体的哪边,默认top
四个方向 “top”, “bottom”, “left”, “right”
fill属性
填满整个x轴、y轴,或全部填满
“x”, “y”, “both” 配合side使用
padx, pady属性
对外部控件的距离
默认单位是像素
t2.pack(side='left',padx='20',pady='150')
x轴向右移动20像素,y轴向下移动150像素
ipadx, ipady属性
对内部控件的距离
anchor属性
对其方式 “n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center” (默认为” center”)
网格布局grid(row=0,column=0)
(5)python tkinter-单选、多选
单选按钮
tkinter.Radiobutton(root,text='a').pack()
tkinter.Radiobutton(root,text='b').pack()
tkinter.Radiobutton(root,text='c').pack()
默认被选中,且单个一组
variable把Radiobutton分成了一个组.
value一组里的单个按钮
tkinter.Radiobutton(root,text='a',variable =1,value = 1).pack()
tkinter.Radiobutton(root,text='b',variable =1,value = 2).pack()
tkinter.Radiobutton(root,text='c',variable =1,value = 3).pack()
(6)python tkinter-容器、子窗体
Frame
f = tkinter.Frame(width=380, height=270, bg='white').pack()
LabelFrame
f = tkinter.LabelFrame(width=180, height=130,text='第一组').pack()
Toplevel
import tkinter
import tkinter.messagebox
def but():
tkinter.Toplevel()
root=tkinter.Tk()
root.title('GUI')#标题
root.geometry('800x600')#窗体大小
root.resizable(False, False)#固定窗体
f = tkinter.Button(root,text='子窗体',command=but).pack()
root.mainloop()
增加 indicatoron=0属性,改变单选按钮风格
(7)python tkinter-菜单栏
菜单栏 Menu
f = tkinter.Menu(root)
root['menu']=f
f.add_command(label='菜单')#
f.add_command(label='关于')
import tkinter
import tkinter.messagebox
def but():
tkinter.Toplevel()
root=tkinter.Tk()
#root.title('GUI')#标题
root.geometry('800x600')#窗体大小
root.resizable(False, False)#固定窗体
f = tkinter.Menu(root)#创建根菜单
root['menu']=f#顶级菜单关联根窗体
f1=tkinter.Menu(f)#创建子菜单
f2=tkinter.Menu(f)
f1.add_command(label='打开')#子菜单栏
f1.add_command(label='保存')
f2.add_command(label='复制')
f2.add_command(label='删除')
f.add_cascade(label='文件',menu=f1)#创建顶级菜单栏,并关联子菜单
f.add_cascade(label='编辑',menu=f2)
f.add_cascade(label='关于')
root.mainloop()
去横线
f1=tkinter.Menu(f,tearoff=False)
快捷键
f2.add_command(label='复制',accelerator='Ctrl+C')
分割线
f2.add_command(label='复制',accelerator='Ctrl+C')
f2.add_separator()#分割线
f2.add_command(label='删除')