Python 图形界面-python tkinter

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类似,但是可以指定输入范围值
PanedWindowPanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFramelabelframe 是一个简单的容器控件。常用与复杂的窗口布局。
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' 

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='删除')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huanghong6956

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值