python学习(五)

tkinter库——python可视化编程

GUI——图形用户界面

官方帮助文档:tkinter —— Tcl/Tk 的 Python 接口 — Python 3.10.5 文档

#导入
import tkinter 
import tkinter as t
from tkinter import *

1、tkinter控件及属性简介

窗口类:主窗口Tk,窗口Toplevel

标签类:单行label,多行Message

按钮:Button

输入类:单行Entry,多行text,Spinbox

选择类:Radiobutton,Checkbutton,Listbox

对话框:Message

菜单类:Menu,Menubutton,OptionMenu

容器类:Frame,LabelFrame,PanedWindow

图形类:Image,PhotoImage,BitmatImage

绘图:Canvas

控件属性设置:

# 创建控件时设置
lbl = tk.Label(w,text = '我是标签')
# 控件名['属性名']=值
lbl['text'] = '我是标签'
# 控件名.configure(属性名=值)
lbl.configure(text='我是标签')

 属性设置实例:

import tkinter as tk
w = tk.Tk()
lbl = tk.Label(w,text='我是标签')  #创建时设置属性text
lbl['bg'] = 'green' #控件名['属性名']=值
lbl.configure(fg='white')  # 控件名.configure(属性名=值)
lbl.pack()
w.mainloop() #进入消息循环

运行结果:

可以尝试设置界面大小及窗口文字

2、Label和Message

都是用来显示信息的

label:显示文字,输出图片,图文混乱

message:显示文字,自动换行,不支持图文混排

常见属性

● text:显示的文本
● bg/fg:背景前景色
● anchor:内容在控件的位置
● justify:最后一行文字的对齐
● width/height:标签宽/高度(字符数或像素)
● compound:图文混排图像的位置
● image/bitmap:显示的图像/位图

3、Button

按钮可以单击

按钮可以显示文字和图片

设置其command属性为函数,单击时会调用该函数

常见属性:command,text,compound,image/bitmap,width/height等

实例:创建一个tk窗口。要求如下

三个控件:一个标签,两个按钮

单击按钮说:上面的标签上的数字会增加

单击按钮关闭:关闭窗口

import tkinter as t
w = t.Tk()
lbl = t.Label(w,text='重要的事说?遍',height=5,width=20,fg="blue")
lbl.pack()
count = 0 #设置一个计数变量
def test():
    global count #引用全局变量
    count = count + 1   
    lbl.config(text="重要的事说{}遍".format(count))
#第一个按钮
btn1 = t.Button(w,text="说",command = test,width=10)
btn1.pack(side='left')
#第二个按钮
def closewindow():
    w.destroy()
btn2 = t.Button(w,text="关闭",command = closewindow,width=10)
btn2.pack(side='right')
w.mainloop()

运行结果:

 

4、Entry和Text

一般用于输入信息和显示信息

Entry为单行文本框,Text为多行文本框

Entry为密码输入框时,需要隐藏字符,show= ' * '

# text对文本内容的操作
get(index1,index2)            #获取文本 
delete(index1,index2)         #删除文本
insert(index,text)            #插入文本
replace(index1,index2,text)   #替换文本
search(text,index1,index2)    #搜索文本
index1,index2,index3          #位置
'insert':当前光标处
'end':末尾处
#行号.列号:行号从1开始,列号从0开始
#如insert(1.0,'abc')在第1行第0列插入'abc'

 应用实例:温度转换,要求如下:

三个控件:标签,文本框,按钮

文本框输入摄氏温度,单击转换按钮,标签中显示转换的华氏温度

import tkinter as t
w = t.Tk()
lbl = t.Label(w,text='转换℃到℉...',height=5,width=20,fg="blue") #标签
lbl.pack()
ety = t.Entry(w,text="0")  #文本框
ety.pack()
def convert():   #函数
    cd = float(ety.get())
    lbl.config(text="%.2f℃ = %.2f℉"%(cd,cd*1.8+32))
btn = t.Button(w,text="转换",command = convert)  #按钮
btn.pack()
w.mainloop()

输入34,运行结果如图:

 实例二:文本输入tk窗口

import tkinter as t 
w = t.Tk ()
myfont =('黑体',20, 'normal')
txt = t.Text(w,bg = 'palegreen',font = myfont,width = 30, height = 10)
txt.pack()
s = t.StringVar()
s.set ('')
ety = t.Entry(w,textvariable = s,font = myfont) 
line=0
def process (event):
    global line
    line = line + 1
    txt.insert('end', str(line)+':'+ety.get())
    txt.insert('end', '\n')
    s.set('')
ety.bind ('<Return>',process) 
ety.pack(fill = 'x')  #使得entry横向扩展
w.mainloop()

运行结果如下:

5、对话框控件

消息框:messagebox

文件框:filedialog

颜色框:colorchooser

使用前都需要引用

from tkinter.messagebox import *
#或者
import tkinter.messagebox as tm
#消息框messagebox
showerror()
showinfo()
showwarning()
#选择消息框:两个按钮
askyesno()
askquestion()
askokcancel()
askretrycancel()
#共同点,都有两个参数。title:标题;message:内容

6、布局管理器

pack():默认从上到下布局

grid():表格布局,适用于复杂的布局

place():位置坐标布局

应用:设置登录界面

# 创建登录界面
import tkinter as t
import tkinter.messagebox as tm
w = t.Tk() # 生成窗口
w.title('登录')
myfont = ('微软雅黑',12)
lbluser = t.Label(w,text='用户:',font=myfont)
lblpwd = t.Label(w,text='密码:',font=myfont)
lbluser.grid(row=0,column=0)
lblpwd.grid(row=1,column=0)
suser = t.StringVar()
suser.set('')
spwd = t.StringVar()
spwd.set('')
#生成文本框
etyuser = t.Entry(w,font=myfont,textvariable=super)
etypwd = t.Entry(w,show='*',font=myfont,textvariable=spwd)
etyuser.grid(row=0,column=1,columnspan=2)
etypwd.grid(row=1,column=1,columnspan=2)
# 对按钮事件进行编码
def login():
    if etyuser.get() == 'admin' and etypwd.get() == '123456':
        tm.showinfo('恭喜','登录成功')
    else:
        tm.showerror('错误','用户名或密码错误')
        suser.set('')
        spwd.set('')
        etyuser.focus_set()
# 设置按钮
btnlogin = t.Button(w,text='登录',font=myfont,command=login)
btncancel = t.Button(w,text='取消',font=myfont,command=w.destroy)
btnlogin.grid(row=2,column=1)
btncancel.grid(row=2,column=2)
etyuser.focus_set()
w.mainloop() # 进入窗口循环

运行结果:

 

​​​​​​​

7、事件处理

界面——事件处理——程序代码

事件分类、事件绑定、事件处理函数及事件对象

8、Radionbutton和Checkbutton

Radionbutton:单选框

Checkbutton:复选框

应用:2个复选框,2个单选按钮,一个按钮,一个多行标签

采用grid布局

单击结算按钮,下方显示选择的信息

# 创建登录界面
import tkinter as tk
w = tk.Tk() # 生成窗口
#创建复选框,显示呼吸机
m1 = tk.IntVar()
m1.set(0)
c1 = tk.Checkbutton(w,text='呼吸机',variable=m1)
c1.grid(row=0,column=0)
#创建复选框,显示疫苗
m2 = tk.IntVar()
m2.set(0)
c2 = tk.Checkbutton(w,text='疫苗',variable=m2)
c2.grid(row=0,column=1,sticky='w')
#创建两个单选按钮,预付款和货到付款
s = tk.StringVar()
s.set('预付款')
r1 = tk.Radiobutton(w,text='预付款',value='预付款',variable=s)
r2 = tk.Radiobutton(w,text='货到付款',value='货到付款',variable=s)
r1.grid(row=1,column=0)
r2.grid(row=1,column=1)
# 按钮结算单击事件对应的函数
def calc():
    res = '您选择了:'
    if m1.get() == 1:
        res = res + '呼吸机'
    if m2.get() == 1:
        res = res + '疫苗'
    res = res + '\n' + s.get()
    msg.configure(text = res)
btn = tk.Button(w,text='结算',command=calc)
btn.grid(row=2,column=1)
msg = tk.Message(w,width=200)
msg.grid(row=3,column=0,columnspan=2)
w.mainloop()

运行结果:

 

9、Listbox和Scrollbar

Listbox:显示多行信息,可以单选或多选

Scrollbar:滚动条,通常和Listbox,text一起使用

10、TopLevel

程序较大,需要创建多个窗口来处理数据

tkinter.TopLevel()返回一个窗口

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值