18.1使用基本步骤
1.导入tkinter 模块
2.创建Tk类的实例,Tk对象表示一个窗口
3.对窗口进行设置
4.创建控件类的实例
5.调用mainloop函数进入事件循环
18.2编写第一个tkinter程序
- 简单的窗口制作
##tkinter 学习
import tkinter
window =tkinter.Tk()
window['background']='blue'
w=300
h=200
ws=window.winfo_screenwidth()
hs=window.winfo_screenwidth()
x=(ws/2)-(w/2)
y=(hs/2)-(h/2)
window.title('第一个tkinter应用')
window.geometry('%dx%d+%d+%d'%(w,h,x,y))
label=tkinter.Label(window,text='Hello world')
label.pack()
tkinter.mainloop()
18.3布局
pack与grid还有place只能三选一
18.3.1 pack布局
- 控件居中水平
此时默认水平居中
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平居中')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack()
Label(window,text='2',bg='green',fg='white').pack()
Label(window,text='3',bg='blue',fg='white').pack()
mainloop()
- 水平填充
pack方法的fill关键字
w.pack(fill=X)
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平填充')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X)
Label(window,text='2',bg='green',fg='white').pack(fill=X)
Label(window,text='3',bg='blue',fg='white').pack(fill=X)
mainloop()
- 设置边框
(1)水平外边框
pack方法的padx关键字参数
例如:w.pack(fill=X,padx=c)#c为一常数,表示控件外边距大小
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平外边框')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=10)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=10)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=10)
mainloop()
(2)垂直外边框
利用pack的关键字pady
w.pack(fill=X,pady=c)
对于c,控件与控件之间的距离是2c,第一个控件到窗口上边缘的距离是c
下面是两者同时使用
from tkinter import *
window =Tk()
window.title('垂直外边框')
window.geometry('200x100')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=10,pady=5)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=10,pady=5)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=10,pady=5)
mainloop()
- 水平排列
可以使用pack方法里面的side关键字,将其设为LEFT,会让控件从左到右排列
##tkinter 学习
from tkinter import *
window =Tk()
window.title('水平排列')
window.geometry('200x200')
window['background']='black'
Label(window,text='1',bg='red',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
Label(window,text='2',bg='green',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
Label(window,text='3',bg='blue',fg='white').pack(fill=X,padx=20,pady=5,side=LEFT)
mainloop()
18.3.2
18.3.3
18.4 控件
18.4.1 label and button
(1)label
text 设置文本
fg设置文本框的颜色
width和height设置文本框的宽度和高度
还有可以使用变量更改label文本
(2)button
在console输出信息,给用户一些反馈
button和label比起来,使用几乎是一样的,只是button还需要一个处理单击事件的回调函数,这个函数需要通过button的command关键字
import tkinter as tk
import random
window=tk.Tk()
window.title('label and button')
window['background']='black'
window.geometry('300x300+30+30')
labell=tk.Label(window,text='hello,world',fg='blue',width=10,height=3)
labell.pack()
var=tk.StringVar()
var.set('hello,world')
label2=tk.Label(window,textvariable=var,fg='green',width=10,height=3)
label2.pack(pady=20)
onHit=False
#第一个按钮的单击回调函数
def hitMe():
global onHit
if onHit==False:
onHit=True
var.set('世界你好')
else:
onHit=False
var.set('我不好')
button1=tk.Button(window,text='单击我',command=hitMe)
button1.pack()
def getLabelText():
print(var.get())
button2=tk.Button(window,text='获取label控件的文本',command=getLabelText)
button2.pack(pady=20)
window.mainloop()
18.4.2 entry and text
(1)text可以插入图片,这个是我想要的
感觉怪怪的,因为图片没有显示完整
import tkinter as tk
window=tk.Tk()
window.title('text 图片设置')
window['background']='black'
window.geometry('1000x1000+30+30')
text=tk.Text(window)
text.pack(pady=10)
#对于插入的图片,支持gif bmp,不支持jpg和png
#所以遇到这些不支持的图片,要用PIL处理一下
from PIL import Image,ImageTk
#装载pic.png
pic=Image.open('cuteanmi.jpg')
photo1=ImageTk.PhotoImage(pic)
text.image_create(tk.END,image=photo1)
#插入字体
text.tag_configure('big')
text.insert(tk.END,'keai','big')
window.mainloop()
18.4.3 ==radiobutton ==
Radiobutton是单选按钮控件
18.4.4 checkbutton
import tkinter as tk
window=tk.Tk()
window.title('radiobutton')
window.geometry('300x300')
window['background']='black'
#该变量与三个Radiobutton同时绑定
var=tk.StringVar()
label=tk.Label(window,bg='yellow',width=20,text='empty')
label.pack()
#默认选择第一个
var.set('A')
def printSelection():
label.config(text='你已经选择了'+var.get())
printSelection()
#创建控件
r1=tk.Radiobutton(window,text='选项A',variable=var,value='A',command=printSelection)
r1.pack()
r2=tk.Radiobutton(window,text='选项B',variable=var,value='B',command=printSelection)
r2.pack()
r3=tk.Radiobutton(window,text='选项C',variable=var,value='C',command=printSelection)
r3.pack()
window.mainloop()
18.4.5 scale
18.4.6 Listbox
18.5 向窗口添加菜单
18.6 对话框
import tkinter as tk
import tkinter.messagebox
window=tk.Tk()
window.title('my window')
window.geometry('300x300')
def hit_me():
#依次执行,只有前一个完成了后一个才会显示
#返回ok
tk.messagebox.showinfo(title='信息对话框',message='这是我要的信息')
#返回ok
tk.messagebox.showwarning(title='警告对话框',message='警告')
#返回ok
tk.messagebox.showerror(title='错误信息',message='错误信息')
#返回ok或者No
print(tk.messagebox.askquestion(title='询问对话框',message='你要干嘛'))
#返回true或者false
print(tk.messagebox.askyesno(title='yes/no',message='请给出正确选择'))
# 返回true或者false
print(tk.messagebox.askokcancel(title='ok/cancel',message='确定取消'))
# 返回true或者false或者None
print(tk.messagebox.askokcancel(title='ok/no/cancel',message='please give me your answer'))
tk.Button(window,text='hit me',command=hit_me).pack()
window.mainloop()