python tkinter详解 博客园_Python tkinter 使用

1、 窗口 Tk()

# -*- encoding=utf-8 -*-

import tkinter

if __name__ == '__main__':

w = tkinter.Tk() # 窗口

w.title('南风丶轻语') # 标题

w.geometry('500x500+30+30') # 大小以及位置

w.mainloop()

pass

运行结果

1768648-20200715162504326-1594354382.png

2、 标签 Label()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def string_var():

if show_str.get() == 'aaa':

show_str.set('bbb') # 改变StringVar的值

else:

show_str.set('aaa')

#label.cget('text')返回text的值:标签

#label.cget('bg')返回背景颜色:yellow

#label.config(text='新值')重新设置text,同设置StringVar

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试标签') # 标题

w.geometry('500x500+30+30') # 大小以及位置

show_str = StringVar(w) # python37需要指定master,而Python27不需要

show_str.set('aaa')

label = Label(

master=w, # 父容器

text='标签', # 文本

bg='yellow', # 背景颜色

fg='red', # 文本颜色

bd=3, # 边框的大小

relief='flat', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 FLAT。

height=1, # 高度

width=5, # 宽度

padx=1, # 内间距,字体与边框的X距离

pady=1, # 内间距,字体与边框的Y距离

state='normal', # 设置状态 NORMAL、ACTIVE、 DISABLED 默认 NORMAL

cursor='circle', # 鼠标移动时样式 arrow, circle, cross, plus

textvariable=show_str, # 通过StringVar对象设置text,注释该行则前面的text才有用

)

label.pack()

Button(command=string_var, text='通过StringVar改变').pack()

w.mainloop()

运行结果

1768648-20200716093732257-1368765982.png

3、 按钮 Button()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def button_event():

print('按钮事件')

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试按钮') # 标题

w.geometry('500x500+30+30') # 大小以及位置

button = Button(

master=w, # 父容器

text='点击', # 文本

bg='yellow', # 默认颜色

activebackground='red', # 点击时的背景颜色

fg='pink', # 默认文字颜色

activeforeground='blue', # 点击时的文字颜色

bd=3, # 边框的大小

relief='ridge', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 FLAT。

command=button_event, # 点击后执行的按钮事件

height=1, # 按钮的高度

width=5, # 按钮的宽度

highlightcolor='green',

padx=1, # 内间距,字体与边框的X距离

pady=1, # 内间距,字体与边框的Y距离

state='normal' # 设置状态 NORMAL、ACTIVE、 DISABLED 默认 NORMAL

)

button.pack()

w.mainloop()

运行结果

1768648-20200715153603359-1833054980.png

4、 输入框 Entry()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def add_end():

entry.insert('end', 'aaa') # 插入字符串,end为插入到末尾

def add_insert():

entry.insert('insert', 'ddd') # 插入字符串,insert为插入到光标位置

def add_first():

entry.insert(0, 'bbb') # 插入字符串,0为插入到最前

def add_index_4():

entry.insert(4, '444') # 插入字符串,4为插入的下标

def get_message():

print(entry.get())

# entry.delete(0,tkinter.END)清空Entry

# entry.delete(5)清空Entry下标5的数据

#entry.config(state='disabled')设置不可点击

#entry['state]='disabled'

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试按钮') # 标题

w.geometry('500x500+30+30') # 大小以及位置

entry = Entry(

master=w, # 父容器

bg='yellow', # 默认颜色

fg='pink', # 默认文字颜色

bd=3, # 边框的大小

relief='ridge', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 flat。

width=20, # 宽度

state='normal', # 设置状态 normal、 disabled 默认 normal

show='', # 显示样式,例如密码可以设置为*

)

entry.pack()

Button(command=add_first, text='增加到最前').pack()

Button(command=add_end, text='增加到末尾').pack()

Button(command=add_insert, text='增加到光标位置').pack()

Button(command=add_index_4, text='增加位置为4').pack()

Button(command=get_message, text='获取信息').pack()

w.mainloop()

运行结果

1768648-20200716095610482-815411655.png

5、 文本框Text()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def add_end():

text.insert(END, 'aaa') # 插入字符串,END为插入到末尾

def add_insert():

text.insert(INSERT, 'ddd') # 插入字符串,INSERT为插入到光标位置

def get_message():

print(text.get(1.0, END))

def add_button():

text.window_create(INSERT, window=button)

def delete_button():

text.delete(button)

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试Text') # 标题

w.geometry('500x500+30+30') # 大小以及位置

frame = Frame() # 框架控件

s = Scrollbar(frame) # 滚动条

s.pack(side=RIGHT, fill=Y)

text = Text(

master=frame, # 父容器

bg='pink', # 默认颜色

fg='black', # 默认文字颜色

bd=2, # 边框的大小

relief='groove', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 flat。

width=20, # 宽度,根据字符,不是像素,表示可以容纳20个字符

height=10, # 高度

state='normal', # 设置状态 normal、 disabled 默认 normal

yscrollcommand=s.set # 滚动条绑定

)

text.pack()

s.config(command=text.yview)

frame.pack()

button = Button(text='测试插入组件')

Button(command=add_end, text='增加到末尾').pack()

Button(command=add_insert, text='增加到光标位置').pack()

Button(command=get_message, text='获取信息').pack()

Button(command=add_button, text='插入按钮').pack()

Button(command=delete_button, text='删除按钮').pack()

w.mainloop()

运行结果

1768648-20200716131505096-405548322.png

6、列表框控制元件ListBox()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def get_select():

select = listbox.curselection() # 获取选择的下标,返回元组

print(select)

for index in select:

print(listbox.get(index)) # 获取下标的值

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试标签') # 标题

w.geometry('500x500+30+30') # 大小以及位置

show = ['aa', 'bb', 'cc', 'dd']

frame = Frame()

frame.pack()

s = Scrollbar(frame)

s.pack(side=RIGHT, fill=Y)

listbox = Listbox(

master=frame, # 父容器

bg='yellow', # 背景颜色

fg='red', # 文本颜色

bd=3, # 边框的大小

relief='flat', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 FLAT。

height=3, # 高度

width=5, # 宽度

state='normal', # 设置状态 NORMAL、ACTIVE、 DISABLED 默认 NORMAL

cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus

selectmode=EXTENDED, # 选择模式

# SINGLE(單選)、BROWSE(也是單選,但拖動滑鼠或通過方向鍵可以直接改變選項)、

# MULTIPLE(多選)和 EXTENDED(也是多選,但需要同時按住 Shift 鍵或 Ctrl 鍵或拖拽滑鼠實現),

# 預設是 BROWSE

yscrollcommand=s.set,

)

s.config(command=listbox.yview)

for i in show:

listbox.insert(END, i) # 插入选择项

listbox.pack()

Button(command=get_select, text='查看选择').pack()

w.mainloop()

运行结果

1768648-20200716134906808-162391223.png

7、复选框Checkbutton()

# -*- encoding=utf-8 -*-

import tkinter

from tkinter import *

def get_select():

if choose.get() == 1:

print('选中')

else:

print('未选中')

def see_select():

if choose.get() == 1 and choose1.get() == 1:

print('选中了两个')

else:

print('未都选中')

if __name__ == '__main__':

pass

w = tkinter.Tk() # 窗口

w.title('测试') # 标题

w.geometry('500x500+30+30') # 大小以及位置

choose = IntVar(w)

checkbutton = Checkbutton(

master=w, # 父容器

text='选择1', # 文本

bg='yellow', # 背景颜色

fg='red', # 文本颜色

bd=3, # 边框的大小

relief='flat', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 FLAT。

height=1, # 高度

width=5, # 宽度

state='normal', # 设置状态 NORMAL、ACTIVE、 DISABLED 默认 NORMAL

cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus

onvalue=1,

offvalue=0,

variable=choose,

)

checkbutton.pack()

choose1 = IntVar(w)

checkbutton1 = Checkbutton(

master=w, # 父容器

text='选择1', # 文本

bg='yellow', # 背景颜色

fg='red', # 文本颜色

bd=3, # 边框的大小

relief='flat', # 边框的3D样式 flat、sunken、raised、groove、ridge。默认为 FLAT。

height=1, # 高度

width=5, # 宽度

state='normal', # 设置状态 NORMAL、ACTIVE、 DISABLED 默认 NORMAL

cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus

onvalue=1,

offvalue=0,

variable=choose1,

)

checkbutton1.pack()

Button(command=get_select, text='测试是否选中').pack()

Button(command=see_select, text='查看选择').pack()

w.mainloop()

运行结果

1768648-20200716140840295-344696088.png

8、框架控件Frame()

用于放置其他控件的容器

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('200x100+30+30') #大小以及位置

frame = Frame() #定义容器

Button(

master=frame, #父容器为frame

text='容器1上的按钮', #文本

).pack()

frame2= Frame() #定义容器

Button(

master=frame2, #父容器为frame2

text='容器2上的按钮', #文本

).grid(row=0, column=0)

Label(frame2, text='容器2上的Lable', bg='yellow', fg='pink').grid(row=0, column=1)

frame.pack()

frame2.pack()

w.mainloop()

运行结果

1768648-20200716142030830-173774723.png

9、pack()布局

(1)默认居中,从上而下

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('200x100+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').pack() #默认居中,从上而下

Button(w, text='按钮2', bg='yellow').pack()

Button(w, text='按钮3', bg='blue').pack()

w.mainloop()

运行结果

1768648-20200716142519034-1433247310.png

(2)填充X轴或Y轴

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('200x100+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').pack(

fill=X, #填充横坐标

)

Button(w, text='按钮2', bg='yellow').pack()

Button(w, text='按钮3', bg='blue').pack()

w.mainloop()

运行结果

1768648-20200716143328651-1048214515.png

(3)内外间距,注意与fill同用时不容易看出效果

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('200x200+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').pack(

padx=10, #横坐标外间距

pady=10, #纵坐标外间距

ipadx=10, #横坐标内间距

ipady=10, #纵坐标内间距

)

Button(w, text='按钮2', bg='yellow').pack()

Button(w, text='按钮3', bg='blue').pack()

w.mainloop()

运行结果

1768648-20200716143612454-1779454118.png

(4)上下左右Side放置

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('200x200+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').pack(

side=RIGHT, #右对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮2', bg='yellow').pack(

side=LEFT, #左对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮3', bg='blue').pack(

side=TOP, #上对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮4', bg='pink').pack(

side=BOTTOM, #下对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

w.mainloop()

运行结果

1768648-20200716144234423-1722686217.png

(5)左对齐Side放置

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x100+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').pack(

side=LEFT, #右对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮2', bg='yellow').pack(

side=LEFT, #左对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮3', bg='blue').pack(

side=LEFT, #上对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

Button(w, text='按钮4', bg='pink').pack(

side=LEFT, #下对齐

padx=5, #横坐标外间距

pady=5, #纵坐标外间距

ipadx=5, #横坐标内间距

ipady=5, #纵坐标内间距

)

w.mainloop()

运行结果

1768648-20200716144420328-117538299.png

10、grid()布局

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x300+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').grid(row=0, column=0) #按照几行几列自动布局

Button(w, text='按钮2', bg='yellow').grid(row=0, column=1)

Button(w, text='按钮3', bg='blue').grid(row=0, column=2)

Button(w, text='按钮4', bg='pink').grid(row=1, column=0)

Button(w, text='按钮5', bg='Gold').grid(row=2, column=1)

Button(w, text='按钮6', bg='green').grid(row=3, column=2)

w.mainloop()

运行结果

1768648-20200716145047029-747504942.png

11、Place()布局

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x300+30+30') #大小以及位置

Button(w, text='按钮1', bg='red').place(x=10, y=10) #按照给定坐标进行布局

Button(w, text='按钮1', bg='yellow').place(x=50, y=50) #按照给定坐标进行布局

Button(w, text='按钮1', bg='pink').place(x=80, y=0) #按照给定坐标进行布局

w.mainloop()

运行结果

1768648-20200716145356280-2032175167.png

12、其他函数

(1)窗口居中

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

screenwidth =w.winfo_screenwidth()

screenheight=w.winfo_screenheight()

w_width= 300 #假定显示宽为300

w_height = 300 #假定显示宽高300

x = int((screenwidth - w_width) / 2)

y= int((screenheight - w_height) / 2)

w.geometry('{}x{}+{}+{}'.format(w_width, w_height, x, y)) #大小以及位置

w.mainloop()

运行结果(无)

(2)取消显示已经放置的控件

#-*- encoding=utf-8 -*-

importtkinterfrom tkinter import *

defunpack():

bt1.pack_forget()defungrid():

bt2.grid_forget()defunplace():

bt3.place_forget()if __name__ == '__main__':passw= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x300+0+0') #大小以及位置

f1 =Frame()

f2=Frame()

f3= Frame(width=100, height=100, bg='blue')

bt1= Button(f1, text='按钮1', bg='red', command=unpack)

bt1.pack()

bt2= Button(f2, text='按钮2', bg='yellow', command=ungrid)

bt2.grid(row=0, column=0)

bt3= Button(f3, text='按钮3', bg='pink', command=unplace)

bt3.place(x=10, y=10)

f1.pack()

f2.pack()

f3.pack()

w.mainloop()

运行结果

1768648-20200716152203745-1923470424.png

(3)提示信息messagebox

importtkinterfrom tkinter import *

from tkinter import messagebox #导入*失败,必须导入messagebox

defshow_msg():

messagebox.showinfo('提示', '提示信息')

messagebox.showwarning('提示', '警告信息')

messagebox.showerror('提示', '错误信息')if __name__ == '__main__':

w= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x300+30+30') #大小以及位置

Button(w, text='提示', bg='red', command=show_msg).pack() #默认居中,从上而下

w.mainloop()

(4)取消最大化

importtkinterif __name__ == '__main__':

w= tkinter.Tk() #窗口

w.title('测试') #标题

w.geometry('300x300+30+30') #大小以及位置

w.resizable(0, 0) #最大化无效

w.mainloop()

(5)增删改查小案例

https://github.com/rainbow-tan/rainbow/tree/master/tkinter%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值