tkinter基础

Tkinter 是 Python 的标准 GUI 库

tkinter是内置到python的安装包中的

创建根窗口

from tkinter import *

exe = Tk()
#生成顶级窗口的实例

exe.title('复杂世界里,一个就够了')
#标题

root.iconbitmap('spider_128px_1169260_easyicon.net.ico')
#设置窗口图标

thelabel = Label(exe,text='the sky is crying as i waiting for you')
#Label标签主要用于显示文本,图片

thelabel.pack()
#pack()用于自动调节组件的尺寸,位置


exe.mainloop()#窗口的主事件循环

pack()

pack()中可传入side参数,可以调整标签位置,参数可以为

LEFT
RIGHT
TOP
BOTTOM
padx=10
pady=10

指定显示位置

anchor= #九个值
W E N S NW SW NE SE CENTER

grid

以表格的形式管理

label = Label()
label.grid(row=0,column=0) #行与列

指定显示位置

sticky = #九个值
W E N S NW SW NE SE CENTER

Label控件

Label显示图片

tkinter是只支持gif的格式,如果要加载png或者jpg的话就要使用PIL模块

gif格式:

photo = PhotoImage(file='')
imageLabel = Label(exe,image=photo)
#image值为tk图片对象
imageLabel.pack()

jpg or png格式:

from PIL import Image, ImageTk

img = Image.open('ques.png')  # 打开图片
photo = ImageTk.PhotoImage(img)  # 用PIL模块的PhotoImage打开

显示文本

Label(exe,text='')
#若设置了image,则该选项会被忽略

显示文本变量

var = IntVar() # tkinter的整数变量
var = StringVar() # tkinter的字符串变量
var.set('') #设置变量的内容

Label(exe,textvariable=var)

justify文本左对齐

Label(exe,text='',justify='Left')

font设置文本字体类型、尺寸

Label(exe,text='',font=('type',size))

fg设置文本字体颜色

Label(exe,text='',fg='color')

compound图片文本混合模式

Label(exe,text='',image=photo,compound=center)

窗口常用设置

设置窗口标题

exe.title()

设置窗口大小

exe.geometry("500x500")

设置窗口是否可以变化长宽

exe.resizable(width=False,height=True)

按钮

点击Button

t = Text(exe)

def print_hrllo():
    t.insert('hello')
Button(exe,text='点我',command=print_hello).pack(side=BOTTOM)
#可以设置边框样式:relief=GROOVE

退出

command=exe.quit #在idle中不能直接退出

勾选Checkbutton

设置单个勾选

var = IntVar()
c = Checkbutton(exe,text='test',variable=var)
#variable:变量,variable 的值为 1 或 0,代表着选中或不选中

设置多个勾选

from tkinter import*

exe = Tk()

exe.title('复杂世界里,一个就够了')

exe.geometry('700x500')

girls = ['西施','貂蝉','王昭君']
v = []

for girl in girls:
        v.append(IntVar)
        c = Checkbutton(exe,text=girl,variable=v[-1])
        c.pack(anchor=W)

mainloop()

按钮列表

LB = Listbox(exe)

插入按钮

LB.insert(END,'第一个选项') #第一个参数为插入的起始位置,第二个参数为按钮名

删除按钮

LB.delete(0,END) #有两个参数时,第一个参数为起始位置,第二个参数为结束位置

LB.delete(1) #有一个参数时为删除以该参数为下标所对应的按钮

输入框

绘制单行文本使用Label组件

多行选项使用Listbox组件

输入框使用Entry组件

显示和处理多行文本使用Text组件

Entry

e = Entry(exe)
e.pack()

插入、删除文本

e.insert(0,'test') #在开始插入‘test’文本
e.delete(0,END) #删除所有文本

获取输入

e.get()

显示输入

Entry(exe,text='',show='*') #输入的文本会变成‘*’

Text

t = Text(根对象,height=2,width=30)

插入:t.insert(mark, 内容)

删除:t.delete(mark1, mark2)

其中,mark可以是行号,或者特殊标识,例如

INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置
END:这个Textbuffer的最后一个字符
SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发 异常

获取输入

t.get('0.0','end') #获取所有输入;0.0表示第0行第0列

删除输入

t.delete('0.0','end') #删除所有输入;0.0表示第0行第0列

让用户无法编辑text内容

output_form.config(state=NORMAL) #可以编辑、插入、删除
output_form.config(state=DISABLED) #无法编辑、插入、删除

框架

photo_frame = Frame(exe)
photo_frame.pack()

创建toplevel

Toplevel(顶级窗口),类似于弹出窗口,具有独立的窗口属性(如标题栏、边框等)

top = Toplevel()

创建滑动条

scroll = Scrollbar(exe)
scroll.pack(side=RIGHT, fill=Y) #位于右侧,在Y方向上充满

此时文本内容仍是独立的,与滑动条无关联

相互配置

text = Text(exe)
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)