python-tkinter基础学习2


本文接着上篇博客: python GUI --tkinter基础学习

python GUI --tkinter基础学习2

Radiobutton单选按钮

  def createWidget(self):
        self.var=IntVar()
        self.radiobutton1 = Radiobutton(self, text="python", value=1, variable=self.var)
        self.radiobutton2 = Radiobutton(self, text="C++", value=2, variable=self.var)
        self.radiobutton3 = Radiobutton(self, text="java", value=3, variable=self.var)
        self.radiobutton1.pack(pady=10)
        self.radiobutton2.pack(pady=10)
        self.radiobutton3.pack(pady=10)
        self.btn = Button(self, text="click", command=self.print_text)
        self.btn.pack(padx=2)
        self.lb = Label(self, width=24, height=3, fg="red", bg="yellow")
        self.lb.pack(side='left')

    def print_text(self):
        if self.var.get()==1:
            self.lb.config(text="I love python")
        if self.var.get()==2:
            self.lb.config(text="I love C++")
        if self.var.get()==3:
            self.lb.config(text="I love java")

将三个单选框按钮关联一个变量,通过读取这个变量的值来进行各种操作。每个radiobutton中都有一个代表他们值的参数:value

在这里插入图片描述

变量var目前有两种操作方法,1、self.var.set("")#设置变量值 2、self.var.get()#获取变量值


Checkbutton 复选按钮

Checkbutton控件用于选择多个按钮的情况,既可以显示文本,也可以显示图像

复选按钮用法与单选按钮差不多一致,所不同的是需要在参数内绑定多个变量

 self.checkbutton1 = Checkbutton(self, text="python", variable=self.var1, onvalue=1, offvalue=0)

Canvas画布

canvas 是一个矩形区域,可以放置图像、图形、组件等

from tkinter import *

root=Tk()
root.title("tk-test")
root.geometry("600x550")
img=PhotoImage(file=r'C:\Users\32409\Desktop\u=1634117951,2414366775&fm=26&gp=0[1].jpg')
canvas=Canvas(root,bg='blue',height=520,width=520)
canvas.create_image(10,10,image=img,anchor='nw')
canvas.pack()
root.mainloop()
  • 画直线

    canvas.create_line([10,10,20,30,40,50,100,50])
    #参数可传元组,列表,里面的数字代表每个节点的坐标
  • 画正方形

canvas.create_rectangle(10,10,300,300)
#传递第一个和第四个顶点的坐标
  • 画椭圆

    canvas.create_rectangle(10,10,300,300)
    canvas.create_oval(10,10,300,300)

在这里插入图片描述

  • small project(随机画十个矩形)

    from tkinter import *
    import random
    
    root=Tk()
    root.title("tk-test")
    root.geometry("600x550")
    canvas=Canvas(root,bg='orange',height=520,width=520)
    canvas.pack()
    def draw_rectangle():
        for i in range(10):
            x1=random.randrange(int(canvas["width"])/2)
            y1=random.randrange(int(canvas["height"])/2)
            x2=random.randrange(int(canvas["width"])/2)
            y2=random.randrange(int(canvas["height"])/2)
            canvas.create_rectangle(x1,y1,x2,y2)
    btn=Button(root,text="随机画10个矩形",command=draw_rectangle)
    btn.pack()
    root.mainloop()

在这里插入图片描述


布局管理器

tkinter提供有三种布局管理器: pack, gridplace

  • grid 表格布局:子组件的位置由行和列的单元格来确定

    grid方法提供的选项

在这里插入图片描述

lb1=Label(root,text="username",)
lb1.grid(row=0,column=0)

grid 测试实例—计算器界面布局

传统的计算器是长这样的:

在这里片描述

现模仿此计算器界面用grid进行布局,并不考虑实现其功能

  • 首先将此界面分为七行四列

    • 其中第一行是Entry控件,它占了四列位置
      -0 ,“.” , 和“=”都各自占有两行或两列,可以用grid( )参数中是rowspan=2columnspan=2
  • 代码如下

    from tkinter import *
    import random
    
    root=Tk()
    root.title("计算器")
    root.geometry("400x300")
    Entry(root,width=40).grid(row=0,column=0,columnspan=4,padx=5,pady=10)
    
    text=(("MC","M+","M-","MR"),("C","±","÷","×"),
          (7,8,9,"-"),(4,5,6,"+"),(1,2,3,"="),(0,"."))
    for rowindex,row in enumerate(text):
        for colindex,col in enumerate(row):
            if col=="=":
                Button(root,text=col).grid(row=rowindex+1,column=colindex,rowspan=2,sticky="wnse")
            elif col==0:
                Button(root,text=col).grid(row=rowindex+1,column=colindex,columnspan=2,sticky="wnse")
                pass
            elif col==".":
                Button(root,text=col).grid(row=rowindex+1,column=colindex+1,sticky="wnse")
            else:    
                Button(root,text=col).grid(row=rowindex+1,column=colindex,sticky="wnse")
    
    root.mainloop()

在这里插入图片描述

注意:注意此时sticky的写法,意思是铺满它所在的那个行列(紧贴它所在单元格的四个角:东,南,西,北),如果不加sticky那么效果如下图:在这里插入图片描述

python -tkinter基础学习3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值