本文接着上篇博客: 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
, grid
和place
-
grid
表格布局:子组件的位置由行和列的单元格来确定 grid方法提供的选项
lb1=Label(root,text="username",)
lb1.grid(row=0,column=0)
grid 测试实例—计算器界面布局
传统的计算器是长这样的:
现模仿此计算器界面用grid进行布局,并不考虑实现其功能
-
首先将此界面分为七行四列
- 其中第一行是
Entry
控件,它占了四列位置
-0 ,“.” , 和“=”
都各自占有两行或两列,可以用grid( )
参数中是rowspan=2
、columnspan=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
那么效果如下图: