tkinter gui

一.tkinter创建gui程序

from tkinter import *  
root(根窗口名)=Tk()
root.mainloop()#窗口事件主循环

方法

tkinter.geometry(宽度x高度+左上角水平坐标+左上角垂直坐标)(是英文x不是乘号)
tkinter.title(“标题“)

tkinter提供变量类:IntVar,StringVar,DoubleVar,BooleanVar 可创建的变量类对象,能动态设置并获取控件的相应属性。
变量类的方法: x.set(值)x.get()
若 v=IntVar() 不能用v=xx 也不能用if v==xx
*函数中能获取主程序中以上变量类对象的信息,不用传入参数。

二.窗口控件

创建:x=控件名(父窗口,参数。。)
显示x.grid(…)或x.pack(…)
也可不命名,直接用 控件名(…).grid/pack(….)

1标签

a=Label(父窗口[,text=”..”,width=,height=])
动态显示文本label对象.config(None,text=”..”)

2按钮

a=Button(父窗口,text=,command=函数名)函数名不加括号参数表

这里写图片描述

from tkinter import *
count=0
root=Tk()
def f1():
    global count
    count=count+1
    lab.config(None,text="你点击了"+str(count)+"次")

lab=Label(root,text="0")
lab.pack()
b1=Button(root,text="click",command=f1)
b1.pack()
root.mainloop()

3单行文本框

  • a=Entry(父窗口,[width=,height=])
    插入文本 a.insert(index,”…”) 会自动转为字符型
  • a.get() 获取的是字符型
  • a.delete(startindex[,endindex]) 删除从开始到不包括终止位置的字符。若无终止位置,只删除起始位置的一个字符
    *END 代表末尾

4多行文本框

  • a=Text(父窗口,[bg(背景色)=,fg(前景色)=,font(字体)=,height=,weight=]
    • a.insert(index,”…”) index用 row.line表示,也可以用INSERT表示插入点的当前位置,或用END 如a.insert(0.0,”编辑文本“)
    • a.get(startindex[,endindex])获取从开始到不包括终止位置的字符。若无终止位置,只获取起始位置的一个字符 。index用 row.line表示
    • a.delete(startindex[,endindex]) 删除从开始到不包括终止位置的字符。若无终止位置,只删除起始位置的一个字符 。index用 row.line表示
    • 用tags对自定义区域进行格式设置
      a.tag_add(“标志名”,startindex[,endindex()(必须先写这个)
      a.tag_config(“标志名”[,foreground=,background=])

      这里写图片描述
from tkinter import *
def fu1():
    if  v1.get()==0:
        t.tag_add("tt",0.0,END)
        t.tag_config("tt",foreground="red")
    if  v1.get()==1:
        t.tag_add("tt",0.0,END)
        t.tag_config("tt",foreground="yellow")
    if  v1.get()==2:
        t.tag_add("tt",0.0,END)
        t.tag_config("tt",foreground="pink")
def fu2():
    t.delete(0.0,END)
    txt=""
    if v2.get()==1:
        txt+="斜体"
    if v3.get()==1:
        txt+="粗体"
    if v2==0 and v3==0:
        txt=""
    t.insert(0.0,txt)

root=Tk()
root.columnconfigure(0,weight=1)
root.rowconfigure(0,weight=1)
f=Frame(root)
f.grid(row=0)
t=Text(f)
t.insert(0.0,"编辑文字")
t.grid(row=0,columnspan=5)
t.tag_add("tt",0.0,END)
bb=[[0,"red"],[1,"yellow"],[2,"pink"]]
v1=IntVar()
v2=IntVar()
v3=IntVar()
for i,j in bb:
    Radiobutton(f,text=j,variable=v1,value=i,command=fu1) .grid(row=1,column=i)
Checkbutton(f,text="斜体",variable=v2,command=fu2).grid(row=1,column=3)
Checkbutton(f,text="粗体",variable=v3,command=fu2).grid(row=1,column=4)
root.mainloop()

5单选按钮

a=Radiobutton(父窗口名,text=,variable=组控参数名,value=按钮被选中时的值,command=函数名)
被选中后value的值会传给variable,一组单选按钮共用一个variable。


这里写图片描述

from tkinter import *
def cal():
    print(rvar.get())
def fx():
    if rvar.get()==0:

        e3.delete(0,END)
        lab1.config(None,text="-")
        e3.insert(0,int(e1.get())-int(e2.get()))
    elif rvar.get()==1:
        lab1.config(None,text="+")
        e3.delete(0,END)
        e3.insert(0,int(e1.get())+int(e2.get()))
    elif rvar.get()==2:
        lab1.config(None,text="*")
        e3.delete(0,END)
        e3.insert(0,int(e1.get())*int(e2.get()))
    elif rvar.get()==3:
        lab1.config(None,text="/")
        e3.delete(0,END)
        e3.insert(0,int(e1.get())/int(e2.get()))

root=Tk()
f=Frame(root)
root.columnconfigure(0,weight=1)
root.rowconfigure(0,weight=1)
f.grid(row=0)
e1=Entry(f)
e1.grid(row=0)
lab1=Label(f,text="")
lab1.grid(row=0,column=1)
e2=Entry(f)
e2.grid(row=0,column=2)
lab2=Label(f,text="=")
lab2.grid(row=0,column=3)
e3=Entry(f)
e3.grid(row=0,column=4)
rvar=IntVar()
bb=[["-",0],["+",1],["*",2],["/",3]]
b=[] #一组单选按钮
cal()
for i,j in bb:
    b.append(Radiobutton(f,text=i,variable=rvar,value=j,command=fx))
    b[j].grid(row=1,column=j)
root.mainloop()

6复选按钮

a=Checkbutton(父窗口名,text=,variable=,onvalue=(默认为1),offvalue=( 默认为0),command=函数名) 每个复选按钮都有一个自己的variable

例子在4多行文本框里

7菜单


menubar=Menu(父窗口)#把菜单栏添加到父窗口中,menubar是一个菜单栏名
m1=Menu(菜单栏名)#创建一个下拉菜单,m1是一个下拉菜单名
m1.add_command(label="下拉菜单中单项文字文字",command=函数名)#向下拉菜单添加一个菜单项
m1.add_separator()#添加菜单分隔线。
#一个下拉菜单中创建多个菜单项时,可在两个add_command()之间加add_separator()添加菜单分隔线
menubar.add_cascade(label="菜单中单项文字",menu=下拉菜单名)#将下拉菜单添加到菜单栏中

父窗口.config(menu=菜单栏名) 

 例

这里写图片描述

def prin(n):
    print(n)
def savecall():
    print("save")
def opencall():
    print("open")
from tkinter import *
root=Tk()
menubar=Menu(root)
filemenu=Menu(menubar)
filemenu.add_command(label="open",command=opencall)
filemenu.add_command(label="save",command=savecall)
filemenu.add_separator()
filemenu.add_command(label="exit",command=root.destroy)
menubar.add_cascade(label="File",menu=filemenu)
m2=Menu(menubar)
m2.add_command(label="about",command=aboutmenu)
menubar.add_cascade(label="help",menu=m2)
root.config(menu=menubar)
root.mainloop()

三 窗口布局

1.几何布局管理器

pack和grid不能混用

1 pack

控件对象.pack()
根据创造顺序从上而下添加到父控件中。

可选参数

  1. side:TOP(默认),BOTTOM,LEFT,RIGHT
  2. expand:窗口大小变化时控件是否随之变化,可选值“no”或0(不变),“yes”或1.(与fill一同用才能缩放)
  3. fill:填充方式 “Y”或“X”或“BOTH”

这里写图片描述

from Tkinter import *
root = Tk()
Button(root,text=’A’).pack(side=LEFT,expand=YES,fill=Y)
Button(root,text=’B’).pack(side=TOP,expand=YES,fill=BOTH)
Button(root,text=’C’).pack(side=RIGHT,expand=YES,fill=NONE)
Button(root,text=’D’).pack(side=LEFT,expand=NO,fill=Y)
Button(root,text=’E’).pack(side=TOP,expand=YES,fill=BOTH)
Button(root,text=’F’).pack(side=BOTTOM,expand=YES)
Button(root,text=’G’).pack(anchor=SE)
root.mainloop()

2 grid

控件对象.grid()
可选参数:

  1. row,不写默认可添加的第一行
  2. column 不写默认第零列
  3. columnspan,rowspan占几列
    若要自动缩放,把它与frame结合。
from Tkinter import *
root = Tk()
f1=Frame(root) 
root.rowconfigure(0,weight=1)  #root的第一行以一倍速缩放
root.columnconfigure(0,weight=1)#root的第零列以一倍速缩放
f1.grid(row=0)#框架添加到第一行,然后把控件都添加到框架里

grid无法让一整列/行空着,而在这个列/行后面的列/行有控件
若想这么做,要用rowspan/columnspan,不然后面的控件会移到离当前空着的那一行/列中

这里写图片描述

def prin(n):
    print(n)
def savecall():
    print("save")
def opencall():
    print("open")
from tkinter import *
root=Tk()
menubar=Menu(root)
filemenu=Menu(menubar)
filemenu.add_command(label="open",command=opencall)
filemenu.add_command(label="save",command=savecall)
filemenu.add_separator()
filemenu.add_command(label="exit",command=root.destroy)
menubar.add_cascade(label="File",menu=filemenu)
root.config(menu=menubar)

f1=Frame(root,width=480)
root.rowconfigure(0,weight=1)  #缩放
root.columnconfigure(0,weight=1)
f1.grid(row=0)    #框架row=0,菜单不算row

txt=Text(f1,height=2)
txt.insert(0.0,"fresh")
txt.grid(row=0,column=0,columnspan=4)  #文本框1,row=0
txt2=Text(f1,height=2)
txt2.grid(row=1,column=0,columnspan=4)#文本框2,row=1
txt.tag_add("a",0.0,END)
txt.tag_config("a",foreground="black",background="blue")
b1=Button(f1,text="no",command=lambda :prin("noooo"))
b2= Button(f1,text="y",command=lambda:prin("yyyy"))
b2.grid(row=2,column=0)    #文本框2和3,row=2
b1.grid(row=2,column=2)
root.mainloop()

2Frame框架

容器,通过将部件置于其中来布局。一般pack都需要与frame搭配。grid与frame搭配也可以很方便得实现窗体的缩放
f=frame(父窗口)
可将控件置于其中如:Button(f,…) , Label(f,…)…

用grid布局,框架内部的row,column重新从0开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值