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

运行结果

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()

运行结果

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()
 

运行结果

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()

运行结果

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()

运行结果

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()
 

运行结果

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()

运行结果

 8、框架控件Frame()

用于放置其他控件的容器

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 9、pack()布局

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

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 (2)填充X轴或Y轴

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

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

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 (4)上下左右Side放置

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 (5)左对齐Side放置

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 10、grid()布局

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 11、Place()布局

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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()

运行结果

 12、其他函数

(1)窗口居中

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

import tkinter
from tkinter import *

if __name__ == '__main__':
    pass
    w = 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 -*-

import tkinter
from tkinter import *


def unpack():
    bt1.pack_forget()


def ungrid():
    bt2.grid_forget()


def unplace():
    bt3.place_forget()


if __name__ == '__main__':
    pass
    w = 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()

运行结果

 (3)提示信息messagebox

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


def show_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)取消最大化

import tkinter

if __name__ == '__main__':
    w = tkinter.Tk()  # 窗口
    w.title('测试')  # 标题
    w.geometry('300x300+30+30')  # 大小以及位置
    w.resizable(0, 0)  # 最大化无效
    w.mainloop()
posted @ 2019-08-27 15:16  南风丶轻语  阅读(1162)  评论(0编辑  收藏  举报