第一章 tkinter 窗体学习
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
tkinter创建程序,root=Tk()可以理解为一本书,我们程序的界面可以理解为书里的每页纸。
我们点击操作就相当于翻页,为了便于操作,给每页绑定个Frame,这样就可以轻松的删除该页或显示该页了。这样root=Tk()放在外面,不要直接放在类里,因为其他的页面都要用它。一般格式为:
if __name__=='__main__':
root=tk.Tk()
login=LoginPage(root)#登陆界面
mainpage=MainPage(root)#主界面
root.mainloop()
from tkinter import *
root=Tk()
root.title("this is title")
root.iconbitmap('xxx.ico') #设置图标
root.resizable(True,False) #设置宽可以调,高不可调
#root.minsize()
#root.maxsize()
#root.state('zoomed')
root.config(bg='blue')
print(root.keys()) #属性列表
root.mainloop()
三,pack布局
from tkinter import * root=Tk() root.geometry('400x300') #side padx pady ipadx ipady anchor fill expand #side: TOP BOTTOM RIGHT LEFT #anchor N S W E NW放在控件里,显示文字位置 #ipady ipadx填充控件内部区域 #fill :X Y pack布局里面 #expand pack布局里,扩充 label=Label(root,text='hello') label.pack() #默认side=TOP label2=Label(root,text='label2',bg='yellow') label2.pack(side=BOTTOM) label3=Label(root,text='label2',bg='green',anchor=N) label3.pack(side=BOTTOM,pady=0,ipady=40) root.mainloop()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
from tkinter import *
root=Tk()
root.geometry('400x300')
def func2(*args):
print(x.get())
def func(*args):
print("我被读取了")
x=DoubleVar()
x.trace('r',func)#追踪
entry=Entry(root,width=10,textvariable=x).pack()
btn=Button(root,text='click',command=func2).pack()
root.mainloop()
Radiobutton
from tkinter import *
root=Tk()
root.geometry('400x300')
v=IntVar()
rad=Radiobutton(root,text='01',value=1,variable=v)
rad.pack()
rad2=Radiobutton(root,text='02',value=2,variable=v)
rad2.pack()
rad2.select()#默认选中
rad3=Radiobutton(root,text='03',value=3,variable=v).pack()
v2=IntVar()
v2.set(5)
def fun():
print(v2.get())
rad4=Radiobutton(root,text='男',value=4,variable=v2,command=lambda :fun())
rad4.pack()
rad5=Radiobutton(root,text='女',value=5,variable=v2,command=lambda :fun(),indicatoron=0)#indicatioron=0 表示方块
rad5.pack()
root.mainloop()
#例子
import tkinter as tk
root=tk.Tk()
root.geometry("500x500")
def func():
print(var.get())
#创建一个可变变量,收集选择的结果
var=tk.IntVar()
#单选按钮通过一个variable属性,设置为一组。variable通常用选择类组件,可以双向绑定
#选择的结果是通过value 会被赋值给variable 绑定属性
tk.Radiobutton(root,text='c# ',variable=var,value=1).pack(pady=10)
tk.Radiobutton(root,text='c++ ',variable=var,value=2).pack(pady=10)
tk.Radiobutton(root,text='python',variable=var,value=3).pack(pady=10)
tk.Button(root,text='click',command=func).pack()
root.mainloop()
#例子2
import tkinter as tk
# variable用于绑定选择类组件的变量
# textvariable用于绑定文本类组件的变量 如label Entry
root=tk.Tk()
root.geometry("500x400")
langes=[("python",1),('c++',2),('java',3)]
var_rad=tk.IntVar()
def fun():
print(var_rad.get())
def fun2(event):
a=event.widget #获取该控件
print(a['text'],a['value'])
for m,index in langes:
r=tk.Radiobutton(root,variable=var_rad,value=index,text=m,command=fun)
r.pack(pady=10)
r.bind('',fun2)
print(m,index)
root.mainloop()
ChecKbox
from tkinter import *
root=Tk()
root.geometry('400x300')
dic={0:'足球',
1:'排球',
2:'乒乓球',
3:'篮球',
}
check_flag={}
for i in range(len(dic)):
check_flag[i]=BooleanVar()
check_btn=Checkbutton(root,text=dic[i],variable=check_flag[i])
check_btn.pack()
def test():
chose=[]
for i in check_flag:
if check_flag[i].get()==True:
chose.append(dic[i])
print(chose)
button=Button(root,text='click',command=test).pack()
root.mainloop()
Frame
from tkinter import *
root=Tk()
root.geometry('400x300')
frame=Frame(root,relief=GROOVE,width=130,height=100,borderwidth=1,bg='cyan')
frame.pack(padx=10)
label_frame=LabelFrame(root,relief=GROOVE,width=130,height=100,borderwidth=1,text='labelframe')
label_frame.pack(pady=10)
label=Label(frame,text='hello',bg='yellow')
label.pack()
label2=Label(label_frame,text='hello world')
label2.pack()
root.mainloop()
Toplevel
from tkinter import *
root=Tk()
root.geometry('400x300+700+200')
top=Toplevel()
top.title('new window')
top.geometry('400x200')
top.config(bg='green')
def creat():
Label(root,text='creat_label').pack()
print(entry.get())
top.destroy()
button=Button(top,text='click',command=creat).pack()
entry=Entry(root,width=50)
entry.pack()
root.mainloop()
滑块Scale
from tkinter import *
root=Tk()
root.geometry('400x300+700+200')
x=DoubleVar()
scla=Scale(root,variable=x,orient=HORIZONTAL,resolution=10,from_=50,to=190,fg='green',troughcolor='red',length=200)
scla.pack()
scla.set(90)
print(scla.get())
label=Label(root,textvariable=x)
label.pack(pady=10)
from tkinter import *
from tkinter.colorchooser import *
root=Tk()
root.geometry('400x300+700+200')
def change_color():
my_color=askcolor()
print(my_color)
root.config(bg=my_color[1])
btn=Button(root,text='调色板',command=change_color)
btn.pack()
root.mainloop()
Spinbox
from tkinter import *
from tkinter.colorchooser import *
root=Tk()
root.geometry('400x300+700+200')
spinbox=Spinbox(root,from_=10,to=90,increment=10)
spinbox.pack()
print(spinbox.get())
l=["北京",'上海']
spinbox2=Spinbox(root,values=l)
spinbox2.pack()
spinbox2.delete(0,END)#清除数据
spinbox2.insert(0,'成都')#spinbox没有set方法
print(spinbox2.get())
root.mainloop()
事件绑定
import tkinter
from tkinter import *
from tkinter.colorchooser import *
from tkinter import messagebox
root=Tk()
root.geometry('400x300+700+200')
def test(event):
# result=messagebox.showinfo('title','message')
result=messagebox.askyesno('hel','你选中')
if result:
print('ok')
else:
print('no')
def fun1():
print('fun1')
def fun(event:tkinter.Event):#绑定键盘事件
btn.unbind('') #解除绑定鼠标右键
print(event.keysym)
print()
btn=Button(root,text='click',command=fun1)
btn.pack()
btn.bind('',test,add='+')
root.bind('',fun)#窗体绑定到键盘事件上
def close():
msg=messagebox.showinfo('确定退出吗?','退出')
root.quit()
root.protocol("WM_DELETE_WINDOW",close)
root.mainloop()
菜单创建
import tkinter as tk
root=tk.Tk()
root.geometry("500x400")
#创建一级菜单栏
menu=tk.Menu(root)
#给菜单栏添加一级选项
menu.add_command(label='新建',command=lambda :print('new_file'))
menu.add_command(label='关于',command=lambda :print('about'))
menu.add_command(label='退出',command=lambda :print('exit'))
#配置菜单栏
root.config(menu=menu)
root.mainloop()
#创建二级菜单栏
import tkinter as tk
root=tk.Tk()
root.geometry("500x400")
#1.0创建一级菜单栏
menu=tk.Menu(root)
#1.1 使用一级菜单栏创建二级菜单栏
file_menu=tk.Menu(menu)
#1.3给二级菜单栏添加选项
file_menu.add_command(label='新建',command=lambda :print('new_file'))
file_menu.add_command(label='关于',command=lambda :print('about'))
file_menu.add_command(label='退出',command=lambda :print('exit'))
#1.4将二级菜单栏绑定到一级菜单栏
menu.add_cascade(label='文件',menu=file_menu)
#配置菜单栏
root.config(menu=menu)
root.mainloop()