python之tkinter学习
创始人
2024-05-01 18:41:39

python图形化界面

  • 导论
  • 为窗口命名(root.wm_title(""))
  • label类(仅用来显示信息)
    • 仅有一个标签
    • 多标签
  • 按钮
    • command绑定事件
    • bind绑定事件
    • 为button设置属性
  • pack的布局
  • grid布局
  • 事件及其绑定
    • bind函数中的事件类型
    • 解绑
  • 输入框
  • 菜单
    • 子菜单
    • 分界线
    • 单选按钮(radiobutton)与多选按钮(checkbutton)
  • 对话框
  • 消息框
  • 复选按钮
  • 文本域
  • 窗口
    • toplevel窗口
    • 窗口重绘
    • 自绘象棋盘
  • 持续更新中~~~~~~~~

导论

1:首先导入包from tkinter import *
2:然后创建一个对象 root=Tk()
3:写完程序后记得root.mainloop()
看下面测试代码

from tkinter import *
root=Tk()
root.mainloop()

在这里插入图片描述

为窗口命名(root.wm_title(“”))

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
root.mainloop()

在这里插入图片描述

label类(仅用来显示信息)

仅有一个标签

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
wl=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口,background是底色
wl.pack()
root.mainloop()

在这里插入图片描述

多标签

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
w1=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口
w2=Label(root,text="欢迎来到图书馆",background='green')#text表示文本内容,root表示显示的窗口
w3=Label(root,text="欢迎来到图书馆",background='blue')#text表示文本内容,root表示显示的窗口
w1.pack()
w2.pack()
w3.pack()
root.mainloop()

注:这里的pack是将标签处于一个默认的位置
在这里插入图片描述

按钮

按钮可以执行相应的功能可以理解为一个函数,点击按钮执行相应的函数功能

command绑定事件

from tkinter import *
def myLabel():global i,roots=Label(root,text='我爱python%d次'%i)#显示在root窗口s.pack()i+=1
root=Tk()
i=1
b=Button(root,text='python',command=myLabel)#text是按钮的名
b.pack()
root.mainloop()

以下是点击5次的结果:
在这里插入图片描述

bind绑定事件

from tkinter import *
def myLabel(event):#加了一个参数来接受事件global i,roots=Label(root,text='我爱python%d次'%i)s.pack()i+=1
root=Tk()
i=1
b=Button(root,text='python')#没有了command
b.bind("",myLabel)#这里Button-1是鼠标左键触发的意思,下面会详细讲
b.pack()
root.mainloop()

在这里插入图片描述

为button设置属性

在这里插入图片描述

pack的布局

1.使用pack函数的时候,默认先使用的放到最上面,然后依次向下排
2.pack函数也可以接受几个参数
(1)side指定了停在哪个方向,可以是TOP,BOTTOM,LEFT,RIGHT,分别表示上下左右
(2)fill参数可以是X,Y,BOTH,NULL,即在水平方向填充,竖直方向填充,双向均填充和不填充
(3)expand可以是YES和NO,它的anchor参数可以是N,E,S,W(分别表示北东南西,对标为上右下左),以及他们的组合或CENTER表示中间
(4)ipadx表示的是内边距的x方向,ipady表示的是内边距的y方向,padx表示的是外边距的x方向,pady表示的外边距的y方向
(pack的布局感觉还是比较复杂,所以还是较常用grid)

from tkinter import *
root=Tk()
Button(root,text='A').pack(side=LEFT,expand=YES,fill=Y)
Button(root,text='B').pack(side=TOP,expand=YES,fill=BOTH,anchor=NE)
root.mainloop()

在这里插入图片描述

grid布局

有3个参数,row表示行,column表示列,还有个sticky参数,可以是N,S,W,E分别表示上下左右

from tkinter import *
root=Tk()
Label(root,text='账号:').grid(row=0,sticky=W)
Entry(root).grid(row=0,column=1,sticky=E)
Label(root,text='密码:').grid(row=1,sticky=W)
Entry(root).grid(row=1,column=1,sticky=E)
Button(root,text="登录").grid(row=2,column=1,sticky=N)
root.mainloop()

在这里插入图片描述

注:pack和grid不能同时用

事件及其绑定

bind函数中的事件类型

< Button-1 > 鼠标左击触发事件,3:鼠标右击,2:鼠标中键
还有其他的键出发,主要用鼠标,这里不再介绍,有兴趣可以查一下

解绑

用函数unbind()

输入框

Entry()
(1)get函数,不需要任何参数,返回的内容是输入框的内容
(2)e是一个文本框,可以操作e[‘show’]='*'之后就成为了一个密码框

import pymysql
from tkinter import *
root=Tk()
Label(root,text="账号").grid(row=0,column=0,sticky=W)#创建一个标签
a_txt=Entry(root)#创建一个文本
a_txt.grid(row=0,column=3,sticky=W)#将文本放入正确的位置
Label(root,text="密码").grid(row=1,column=0,sticky=W)#创建一个标签
b_txt=Entry(root)
b_txt.grid(row=1,column=3,sticky=W)#再创建一个文本
b_txt['show']='*'
root.mainloop()

在这里插入图片描述

菜单

1.Menu新建菜单
2.add_command添加菜单项
3.add_command中参数有label(菜单项名称),command(指定点击是否调用方法),acceletor指定的是快捷键,underline属性是否有下划线
4.可以指定使用哪一个作为顶层菜单

import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
for item in ["文件","编辑","视图","关于"]:menubar.add_command(label=item)
root['menu']=menubar
root.mainloop()

在这里插入图片描述

子菜单

有子菜单的情况用add_cascade,其有两个属性,menu:级联到哪个菜单项上,label:该菜单项的名

import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
Fmenu=Menu(menubar)
Emenu=Menu(menubar)
for item in ["word文件","压缩文件","ppt文件","c++文件","python文件"]:Fmenu.add_command(label=item)
for item in ["删除","赋值","增加"]:Emenu.add_command(label=item)
menubar.add_cascade(label="文件",menu=Fmenu)
menubar.add_cascade(label="操作",menu=Emenu)
root['menu']=menubar
root.mainloop()

注:应先建立好子菜单,再建立上层菜单

分界线

from tkinter import *
def myLabel():global rootLabel(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:sonMenu.add_command(label=each)
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:sonMenu.add_command(label=each)
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()

单选按钮(radiobutton)与多选按钮(checkbutton)

from tkinter import *
def myLabel():global rootLabel(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:sonMenu.add_radiobutton(label=each)#单选
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:sonMenu.add_checkbutton(label=each)#多选
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()

对话框

from tkinter.dialog import *
from tkinter import *
root=Tk()
def myDialog():d=Dialog(None,title="python调查",text="喜欢python吗?",bitmap="info",default=0,strings=("喜欢","很喜欢","非常喜欢"))#对话窗口print(d.num)
btn_begin=Button(None,text="Python调查",command=myDialog)#实行按钮
btn_begin.pack()
btn_quit=Button(None,text="关闭",command=btn_begin.quit)#关闭按钮
btn_quit.pack()
btn_begin.mainloop()

在这里插入图片描述

消息框

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
showinfo(title="python学堂",message="好好学python")

在这里插入图片描述

复选按钮

复选框通常是⽤来选择信息的时候的⼀种选择,它前⾯ 有个⼩正⽅形的⽅块,如果
选中则有⼀个对号,也可以再 次点击以取消该对号来取消选中

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
timeA=0
timeB=0
def funA():global lab1,btnA,timeAif timeA%2==0:timeA+=1lab1['text']="python学科被选中"else:timeA+=1lab1['text']='python学科被取消'
def funB():global lab2, btnB, timeBif timeB % 2 == 0:timeB += 1lab2['text'] = "java学科被选中"else:timeB += 1lab2['text'] = 'java学科被取消'
root=Tk()
btnA=Checkbutton(root,text='python学科',command=funA)
btnA.pack()
btnB=Checkbutton(root,text='java学科',command=funB)
btnB.pack()
lab1=Label(root,text=" ")
lab1.pack()lab2=Label(root,text=" ")
lab2.pack()
root.mainloop()

在这里插入图片描述

from tkinter import *
root=Tk()
btnA=Radiobutton(root,text='python学科',value='python')
btnA.pack()
btnB=Radiobutton(root,text='java学科',value='java')
btnB.pack()
root.mainloop()

在这里插入图片描述

文本域

from tkinter import *
root = Tk()
t = Text(root, width = 50, height = 30)
t.pack()
root.mainloop()

在这里插入图片描述

窗口

toplevel窗口

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
from tkinter import *
root = Tk()
root.title("我是root窗⼝")
lr = Label(root, text = "我属于root")
lr.pack()
top = Toplevel(root, width = 30, height = 20)
top.title("我是toplevel窗⼝")
lt = Label(top, text = "我属于toplevel")
lt.pack()
root.mainloop()

窗口重绘

from tkinter import *root = Tk()
root.title("随便绘制⼀下下")
canv = Canvas(root, width = 400, height = 300, bg = "white")
canv.create_line((0,0), (200,200), width = 8)
canv.create_text(300, 30, text = "Python学院")
canv.pack()
root.mainloop()

自绘象棋盘

from tkinter import *
root = Tk()
root.title("中国象棋棋盘⼿绘")
canv = Canvas(root, width = 400, height = 450)
canv.create_line((0,2), (400,2), width = 2)
for i in range(10):canv.create_line((0, i * 50), (400, i * 50), width = 2)canv.create_line((3,0), (3,450), width = 2)
for i in range(8):canv.create_line((i * 50,0), (i * 50,200), width = 2)
for i in range(8):canv.create_line((i * 50,250), (i * 50,450), width = 2)canv.create_line((397,0), (397,450), width = 2)canv.create_line((150,0), (250,100), width = 2)canv.create_line((150,100), (250,0), width = 2)canv.create_line((150,450), (250,350), width = 2)canv.create_line((150,350), (250,450), width = 2)canv.create_text(110, 220, text = "汉界")canv.create_text(290, 220, text = "楚河")canv.pack()
root.mainloop()

在这里插入图片描述

持续更新中~~~~~~~~

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
篮球运球基本功 篮球运球动作要... 篮球是初中男生们最为喜爱的体育项目之一,甚至部分学生的篮球水平很高,但是平时打球多,并不意味着就一定...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
回归分析结果怎么看 spss回... 性研究领域,无论是现况调查、病例对照研究、还是队列研究,经常遇到分类的健康结局,包括二分类(如:生存...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...