python学习笔记(十六)可视化操作界面Tkinter

       Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。

  对于稍有GUI编程经验的人来说,Python的Tkinter界面库是非常简单的。python的GUI库非常多,选择Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,三则是从需求出发,Python作为一种脚本语言,一种胶水语言,一般不会用它来开发复杂的桌面应用,它并不具备这方面的优势,使用Python,可以把它作为一个灵活的工具,而不是作为主要开发语言,那么在工作中,需要制作一个小工具,肯定是需要有界面的,不仅自己用,也能分享别人使用,在这种需求下,Tkinter是足够胜任的!

       但是,Tkinter相较于c++以及c#的GUI窗体设计来说,就没有后两者那样的方便与快捷,因为Tkinter所有的GUI窗口实现都需要通过代码来实现,c++以及c#的窗体设计可以直接拖动控件进行组合与布局。

 

Tkinter的基础操作:

目录

1、生成一个窗体:

2、按钮(Button)

3、输入框(Entry) 

4、文本输入框(Text)

5、选择按钮(CheckButton)

6、静态文本控件(Lable)

 7、容器控件(frame)

 8、顶层菜单:

9、右键菜单

 10、表单控件(listBox)

11、选择控件(Radiobutton)

12、可拖拽控件(scale)

13、数值范围控件(Springbox)


 

1、生成一个窗体:

import tkinter


win = tkinter.Tk()
win.title("窗体") #窗体标题
win.geometry("400x400+200+50") #设置窗体显示屏幕上的位置

win.mainloop()#将窗体显示出来

实现效果: 

 

2、按钮(Button)

import tkinter

#定义一个功能函数

def func():
	print("hello")

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")


#实例化一个按钮对象,并给按钮绑定一个功能

button = tkinter.Button(win,text="按钮",command=func)
#将按钮显示出来
button.pack()

#在绑定一些简单函数时,可以直接在后面写,不用单独定义功能
button2 = tkinter.Button(win,text="按钮2",command=lambda:print("111111"))
button2.pack()

#win.quit表示退出
button3 = tkinter.Button(win,text="按钮3",command=win.quit)

#让按钮显示在指定位置
button3.place(x=100,y=300)




win.mainloop()

显示效果:点击按钮2,控制台会打印“111111”,点击按钮3,窗体关闭

3、输入框(Entry) 

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

'''
输入控件,用于显示简单的文本内容
show:密文显示
entry = tkinter.Entry(win, show="*") 
# show="*" 可以表示输入密码
'''

#绑定变量
e = tkinter.Variable()
entry = tkinter.Entry(win,textvariable=e)
entry.pack()


#设置值
e.set("123456")

#取值,从框中取值,下面两个方法功能相同
print(e.get())
print(entry.get())


win.mainloop()

效果图:

 

 4、文本输入框(Text)

import tkinter

win = tkinter.Tk()
win.title("窗体")
# win.geometry("400x400+200+50")

'''
文本控件,用于显示多行文本
'''
#创建滚动条
scroll = tkinter.Scrollbar()
text = tkinter.Text(win,width=30,height=4)
#放到窗体右侧
scroll.pack(side = tkinter.RIGHT,fill=tkinter.Y)
text.pack(side = tkinter.LEFT,fill=tkinter.Y)
#关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
#height此处表示显示的行数
# text = tkinter.Text(win,width=30,height=4)
# text.pack()
str = "A device that weighs less than one kilogram is part of a mission that will allow scientists to deliver fourth generation or 4G mobile coverage to the moon in 2019. If successful, the tiny device will provide the moon with its first ever mobile phone network. The lunar network will support high definition streaming of video and data between the moon and earth. The network is part of a mission to the moon. This is a project with the goal of landing the first privately paid for mission to the moon. The 4G mission is set to launch from Cape Canaveral in the United States on a space X Falcon 9 rocket in 2019. Mission to the moon intends to establish and test the first elements of a communications network on the moon. The scientists working on the project opted to build a 4G rather than a fifth generation or 5G network. This is because fifth generation networks are still in testing and trial phases. This means that a 5G network may not yet be stable enough to work on the moon’s surface."
text.insert(tkinter.INSERT,str)
win.mainloop()

效果图:

 

5、选择按钮(CheckButton)

import tkinter

def updata():
	message=""
	if hobby1.get() == True:
		message += "sing\n"
	if hobby2.get() == True:
		message += "dance\n"
	if hobby3.get() == True:
		message += "rap\n"

	#清除text中所有内容
	text.delete(0.0,tkinter.END)
	text.insert(tkinter.INSERT,message)


win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

hobby1 = tkinter.BooleanVar()
check1 = tkinter.Checkbutton(win,text="sing",variable=hobby1,command=updata)
check1.pack()

hobby2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win,text="dance",variable=hobby2,command=updata)
check2.pack()

hobby3 = tkinter.BooleanVar()
check3 = tkinter.Checkbutton(win,text="rap",variable=hobby3,command=updata)
check3.pack()


text = tkinter.Text(win,width=50,height=5)
text.pack()

win.mainloop()

效果图:

 

 

6、静态文本控件(Lable)

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

#进入消息循环

'''
标签控件,显示文本:
'''
#win:父窗体
#wraplength:隔多宽换行
#justify:对齐方式
#anchor:位置 n北,e东,w西,s南,center居中;
# 还可以写在一起:ne东北方向
label = tkinter.Label(win,text="hello world",
                      bg="pink",fg="red",font=("宋体",20),
                      width=50,height=10,wraplength=100,
                      justify="left",anchor="n")

#显示出来
label.pack()

win.mainloop()

 

 7、容器控件(frame)

#frame控件
import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")


'''
框架控件
在屏幕上显示一个矩形区域,多作为容器控件,类似html中的盒子或块元素div
'''
frm = tkinter.Frame(win)
frm.pack()

#left
frm_1 = tkinter.Frame(frm)
tkinter.Label(frm_1,text="左上",bg="pink").pack(side=tkinter.TOP)
tkinter.Label(frm_1,text="左下",bg="blue").pack(side=tkinter.TOP)

frm_1.pack(side=tkinter.LEFT)

#right
frm_r = tkinter.Frame(frm)
tkinter.Label(frm_r,text="右上",bg="red").pack(side=tkinter.TOP)
tkinter.Label(frm_r,text="右下",bg="green").pack(side=tkinter.TOP)

frm_r.pack(side=tkinter.RIGHT)


win.mainloop()

效果图:

 

 8、顶层菜单:

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

menubar = tkinter.Menu(win)
win.configure(menu=menubar)

def func():
	print("sunck")

#创建一个菜单选项
menu1= tkinter.Menu(menubar,tearoff=False)
#给菜单添加内容
for item in ["Python","c","c++","os","swift","c#","java","js","退出"]:
	if item =="退出":
		menu1.add_separator()
		menu1.add_command(label=item,command=win.quit)
	else:
		menu1.add_command(label=item,command=func)

menu2 = tkinter.Menu(menubar,tearoff=False)
menu2.add_command(label="red")
menu2.add_command(label="blue")

#向菜单栏上添加菜单选项
menubar.add_cascade(label="语言",menu=menu1)
menubar.add_cascade(label="颜色",menu=menu2)



win.mainloop()

效果图:

9、右键菜单

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

menubar = tkinter.Menu(win)

#菜单
menu = tkinter.Menu(menubar,tearoff=False)
for item in ["Python","c","c++","os","swift","c#","java","js","退出"]:
	menu.add_command(label=item)

menubar.add_cascade(label = "语言",menu=menu)

def showMeun(e):
	menubar.post(e.x_root,e.y_root)

win.bind("<Button-3>",showMeun)

win.mainloop()

效果图:

 10、表单控件(listBox)

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

'''
列表框控件,可以包含一个或多个文本框
作用:在listBox控件的小窗口显示一个字符串
'''
#1创建一个listBox,添加几个元素
lb = tkinter.Listbox(win,selectmode=tkinter.BROWSE)
lb.pack()

for item in ["c", "c++","java","c#","python"]:
	lb.insert(tkinter.END,item)

#在开始添加
lb.insert(tkinter.ACTIVE,"javascript")

#将列表当成一个元素添加的
# lb.insert(tkinter.END,["very good","very nice"])

#删除 参数1为开始的索引,参数二为结束的索引,如果不指定参数二,只删除第一个索引的内容
# lb.delete(1,3)

#选中
#参数1为开始的索引,参数二为结束的索引,如果不指定参数二,只选中第一个索引的内容
lb.select_set(2,4)

#取消
# lb.select_clear(3)
#
#
# #获取到列表中的元素个数
# print(lb.size())
#
# #获取值,从列表中获取值
# print(lb.get(2,4))

#返回当前的索引项
print(lb.curselection())

#判断一个选项是否被选中
print(lb.select_includes)


win.mainloop()

效果图:

11、选择控件(Radiobutton)

import tkinter


def updata():
	print(r.get())

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

r = tkinter.IntVar()
radio1 = tkinter.Radiobutton(win,text="one",value=1,variable=r,command=updata)
radio1.pack()

radio2 = tkinter.Radiobutton(win,text="two",value=2,variable=r,command=updata)
radio2.pack()

radio3 = tkinter.Radiobutton(win,text="three",value=3,variable=r,command=updata)
radio3.pack()

win.mainloop()

效果图:

 

12、可拖拽控件(scale)

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")

'''
供用户通过拖拽指示器改变变量的值,可以水平,也可以竖直

'''

#tkinter.VERTICAL竖直
#tkinter.HORIZONTAL 水平
#length 水平时表示宽度,竖直时表示高度
#tickinterval 选择值将会为该值的倍数
scale1 = tkinter.Scale(win,from_=0,to=100,orient=tkinter.HORIZONTAL,
tickinterval=10,length=200)
scale1.pack()

scale1.set(20)
def showNum():
	print(scale1.get())

tkinter.Button(win,text="按钮",command=showNum).pack()


win.mainloop()

效果图:

13、数值范围控件(Springbox)

import tkinter

win = tkinter.Tk()
win.title("窗体")
win.geometry("400x400+200+50")


'''
数值范围控件
'''

def updata():
	print(v.get())
#increament 步长,默认为1
#values 最好不要与from_=0,to=100,increament=2同时使用
#values = (0,2,4,6,8)
#command只要值改变,就会执行对应的方法
v = tkinter.StringVar()
sp =tkinter.Spinbox(win,from_=0,to=100,textvariable=v,command=updata)
sp.pack()

#赋值
v.set(20)

#取值
print(v.get())


win.mainloop( )

效果图:

这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python的界面。 Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现的Python代码实在太短了(相比VB),有时候Python一行代码就可以实现VB一个函数的功能。 Python就是这种让人越用越开心的语言。 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准库Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的偶来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout布局,不够直观,而且用起来很不爽。。 至于PyQt/wxPython等GUI库,尽管有可视化设计工具,但总感觉做一般的轻量级应用是杀鸡用牛刀, 而且不够环保,不够低碳,要带一个很大的库,需要目标机器上夜同样安装了PyQt/wxPython,做不了绿色软件。 所以最终的结果是我更喜欢Tkinter,用起来很简单,绿色环保,真正的跨平台,一个py文件到处运行(担心泄密就编译成pyc)。 很多人都认为TK的界面不够美观,不过我经过多次实验后发现导入Python自带的标准TTK主题库,界面非常Native,不输PyQt/wxPython。 此Addin默认启用TTK支持,也可选择关闭。 总而言之,轻量级GUI,TK+TTK足够。 使用此Addin,你可以不用写一句代码就可以生成一个完整可运行的Python的GUI界面,支持2.X和3.X。 安装方法:将压缩包解压到你希望的目录,然后执行Setup.exe完成注册插件过程,打开VB6就可以用了。 在VB窗体上设计完成界面后(你可以大胆的设置各控件的属性,Addin尽量将其翻译为tkinter的控件属性),点工具栏上的VisualTkinter(图标为一片羽毛),再点'生成代码'按钮,即可生成可运行的Python代码,可以拷贝至剪贴板或保存至文件。 一般情况下你可以不用再改变tkinter的控件属性,但是如果你熟悉tkinter,需要更多的控制,可以一一核对各属性,并且修改,再生成代码。 当然除了用来设计界面外,此ADDIN内置的各控件属性列表可以做为编程参考,比较完整,除了极少数我认为大多数人都不用的属性外,属性定义基本上是我从官方的tkinter文档直接翻译的。 如果还没有VB6,网上找一个VB6精简版即可,不到20M,小巧玲珑。 代码已经在Github上托管,更新的版本可以在这上面找到,需求也可以在上面提: https://github.com/cdhigh/Visual-Tkinter-for-Python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值