python tkinter 组件功能实例总结(代码+效果图)(Radiobutton | Button | Entry | Menu | Text)

Components

tkinter.Radiobutton


1 tkinter.Radiobutton 初始化选择及样式(indicatoron)调整

from tkinter import *
root=Tk()

# METHOD 1: 创建变量var,并预先选中value为2的单选按钮
var=IntVar() 
var.set(1)
# METHOD 2:
#var=IntVar(value=1) 

ra1=Radiobutton(root,text='王者荣耀',variable=var,value=0,indicatoron=0)
ra1.grid(row=0,column=0)
ra2=Radiobutton(root,text='和平精英',variable=var,value=1,indicatoron=0)
ra2.grid(row=0,column=1)
ra3=Radiobutton(root,text='天涯明月刀',variable=var,value=2,indicatoron=0)
ra3.grid(row=0,column=2)
 
root.mainloop()

单选按钮,可以改变样式,变得像一个普通按钮的样子,改变样式的参数是:indicatoron 只要设置为0,就可以改变
在这里插入图片描述
单选选择框,可以改变样式,变得像一个普通按钮的样子,改变样式的参数是:indicatoron 只要设置为1,就可以改变
在这里插入图片描述

2 tkinter.Radiobutton 判断Radiobutton的选择状态

from tkinter import *
root=Tk()
 
def selectjob():
    if var.get()==0: # 获取变量的值与单选按钮的value来对比
        print('ra1被选中')
    elif var.get()==1:
        print('ra2被选中')
    else:
        print('ra3被选中')
    
var=IntVar() # 创建变量var,并预先选中value为2的单选按钮
var.set(1)
 
ra1=Radiobutton(root,text='王者荣耀',variable=var,value=0)
ra1.grid(row=0,column=0)
ra2=Radiobutton(root,text='英雄联盟',variable=var,value=1)
ra2.grid(row=0,column=1)
ra3=Radiobutton(root,text='绝地求生',variable=var,value=2)
ra3.grid(row=0,column=2)
 
# ra2.select() 也可以在这里用select来预先选中某个按钮
 
but1=Button(root,text="判断",command=selectjob)
but1.grid(row=0,column=3)
 
root.mainloop()

variable 绑定的变量也可以是字符串变量,相应地,value 就要取一个字符串,当然这个字符串要唯一,不要取相同的字符串,否则无法区别是哪一个单选按钮。
在这里插入图片描述

3 tkinter.Radiobutton 组件显示图片

from tkinter import *
root=Tk()
    
var=IntVar() # 创建变量var,并预先选中value为2的单选按钮
var.set(1)
 
img1=PhotoImage(file='1.png')
img2=PhotoImage(file='2.png')
img3=PhotoImage(file='3.png')
 
ra1=Radiobutton(root,text='PIC1',image=img1,variable=var,value=0)
ra1.grid(row=0,column=0)
ra2=Radiobutton(root,text='PIC2',image=img2,variable=var,value=1)
ra2.grid(row=0,column=1)
ra3=Radiobutton(root,text='PIC3',image=img3,variable=var,value=2)
ra3.grid(row=0,column=2)
 
root.mainloop()

在这里插入图片描述

4 tkinter.Radiobutton List批量创建组件

from tkinter import *
 
def selectjob():
    print(var.get()) # 获取选择的选项
 
root=Tk()
    
var=IntVar() # 创建变量var,并预先选中value为2的单选按钮
var.set(1)
 
list1=['足球','排球','篮球','乒乓球','体操','举重','田径','游泳','射击','拳击']
 
for index,item in enumerate(list1):
 # 用for循环和enumerate函数实现同时输出索引和列表元素内容
    ra1=Radiobutton(root,text=item,variable=var,value=index+1,command=selectjob)
    ra1.grid(row=0,column=index,sticky=W)
 
root.mainloop()

在这里插入图片描述

tkinter.Button


1 tkinter.Button command 事件绑定

import tkinter as tk

root = tk.Tk()

counter = 0
def clickCount():
    global counter
    counter += 1
    lab1.config(text=str(counter))

lab1 = tk.Label(root,text='null')
lab1.pack()

btn1 = tk.Button(root,text="确定",command=clickCount)
btn1.pack()

root.mainloop()

在这里插入图片描述

2 tkinter.Button bind 事件绑定的例子

使用command时,虽然比较简单方便,但也存在很大的局限性:

  • 无法为具体的事件(比如鼠标移动、按键事件)绑定事件处理方法;
  • 程序无法获得事件相关信息。
from tkinter import *

root = Tk()

def move(event):
    lab2["text"] = "鼠标移动到:(%s,%s)" % (event.x,event.y)

def click(event):
    lab2["text"] = "鼠标在(%s,%s)处单击" % (event.x,event.y)

lab1 = Label(root,height=5,width=50)
lab1.bind("<Motion>",move)
lab1.bind("<Button-1>",click)
lab2 = Label(root)
lab1.pack()
lab2.pack()

root.mainloop()

在这里插入图片描述
所有的组件都有一个Bind()方法,该方法可以为任意的事件绑定事件处理方法

  • Bind()的绑定语法为:Widget.bind(event,handler)
    • event事件的字符串大致格式为:modifier-type-detail
      1. type是事件字符串的关键部分,用于描述事件的种类,比如鼠标事件、键盘事件等;
      2. modifier是事件的修饰部分,比如单击、双击等;
      3. detail用于事件的详情,比如指定鼠标左键、右键、滚轮等。
    • 有兴趣的可以去查查
      1. 鼠标的相关事件
      2. 键盘的相关事件
      3. 组件的相关事件
  • Bind()的取消绑定为:Widght.unbind("<····>")

tkinter.Entry


Entry(输入框)组件通常用于获取用户的输入文本
如果你希望接收多行文本的输入,可以使用 Text 组件

Tkinter组件详解(七):Entry

1 tkinter.Entry.insert() 赋值

import tkinter as tk

root = tk.Tk()
entry0= tk.Entry(root)
entry0.pack(padx=20, pady=20)
entry0.delete(0, "end")
entry0.insert(0, "默认文本...")

root.mainloop()

在这里插入图片描述

2 tkinter.Entry.get() 获取控件输入值

strValue = ssss .get()

3 tkinter.Entry textvariable 绑定变量

绑定 Entry 组件到 Tkinter 变量(StringVar),并通过该变量设置和获取输入框的文本:

import tkinter as tk
 
root = tk.Tk()

v = tk.StringVar()
entry_0 = tk.Entry(root, textvariable=v)
entry_0.pack()
 
v.set("Hello, Python!")

strValue = v.get()

root.mainloop()

在这里插入图片描述

4 tkinter.Entry state 正常、禁用、只读

from tkinter import *

root = Tk()
root.geometry('200x200')

lf = LabelFrame(root, text='normal状态')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)

entry_0 = Entry(lf, state='normal')
entry_0.place(relx=0.1, rely=0.25, relwidth=0.8)

root.mainloop()

state取值: normal disable enable readonly
在这里插入图片描述

5 tkinter.Entry 文本框限制输入数字

from tkinter import *
from tkinter import messagebox
root=Tk()

def limit():
    try:
        float(entry_0.get())  #获取entry_0的值,转为浮点数,如果不能转捕获异常
        entry_0.delete('0','end')
        entry_0.insert('1.0',entry_0.get())
    except:
        messagebox.showwarning('警告','请输入数字')

entry_0 = Entry(root)
entry_0.grid(row=0,column=0)

button = Button(root,text='Set',command=limit)
button.grid(row=0,column=1)


mainloop()

除float外,还可以使用float int 等来限制
在这里插入图片描述

tkinter.Menu


1 创建主菜单栏及子菜单

import tkinter
root = tkinter.Tk()

menu = tkinter.Menu(root)#实例化菜单栏对象
submenu = tkinter.Menu(menu, tearoff=1)#实例化菜单对象,tearoff设置为1后,表示菜单是可以独立出来的
submenu.add_command(label="打开")
submenu.add_command(label="保存")
submenu.add_command(label="关闭")
menu.add_cascade(label="文件", menu=submenu)#菜单栏对象添加菜单对象

submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label="复制")
submenu.add_command(label="粘贴")
submenu.add_separator()#菜单项之间的分割线
submenu.add_command(label="剪切")
menu.add_cascade(label="编辑", menu=submenu)#添加分层菜单项

submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label="关于")
menu.add_cascade(label="帮助", menu=submenu)

root.config(menu=menu)#需要使用主窗口的config()方法将菜单栏对象添加的窗口
root.mainloop()

在这里插入图片描述

2 创建右键弹出菜单

import tkinter 
root = tkinter.Tk()
menu = tkinter.Menu(root, tearoff=0)
menu.add_command(label="Copy")
menu.add_command(label="Paste")
menu.add_separator()
menu.add_command(label="Cut")
def popupmenu(event):
    menu.post(event.x_root, event.y_root)
root.bind("<Button-3>", popupmenu)
root.mainloop()

在这里插入图片描述

3 创建一个选项菜单

from tkinter import *  

master = Tk()  

variable = StringVar(master)  
variable.set("one") # <em>default value</em>  
  
w = OptionMenu(master, variable, "one", "two", "three")  
w.pack()  
  
mainloop()  

在这里插入图片描述

tkinter.Text


Text控件通常用作编辑框,可以接收文字的输入, 还可以用做样式化代码编辑器web浏览器
Text控件支持显示多行文本,文本内容中有换行符\n,就会换行显示。

1 创建Text控件

width 表示TEXT的宽度,以字符为单位,具体显示宽度依赖字体大小(font size)
height 表示TEXT的高度,以字符为单位,具体显示高度依赖字体大小(font size)

import tkinter

root = tkinter.Tk()
root.title('tkinter.Text Example')
width = 300 
height = 300

root.geometry(f'{width}x{height}')
text = tkinter.Text(root, width=40, height=10)
text.pack()

root.mainloop()

在这里插入图片描述

2 Text控件插入内容 insert(index, chars, *args)

import tkinter

root = tkinter.Tk()
root.title('tkinter.Text Example')
width = 300 
height = 300

root.geometry(f'{width}x{height}')
text = tkinter.Text(root, width=40, height=10)
text.pack()

text.insert('1.0', '这是文本框,你可以输入任何内容')

root.mainloop()

text.insert('1.0', '这是文本框,你可以输入任何内容')
index=‘1.0’,表示插入的位置在第1行第0个字符处,也就是行首。由于历史惯例,行号从1开始计数,字符编号从0开始计数。
在这里插入图片描述
insert(index, chars, *args) insert是在index处的字符前插入字符

  • index 表示插入文本的位置
  • chars 表示文本的内容
line.char表示第几行的第几个字符,也就是我们前面例子使用的形式
line.end表示在行尾位置(该行的换行符前)插入
END在文本的最后插入

使用注意:

from tkinter.constants import END
# END实际就是字符串'end'
text.insert(END, 'Hello End') 

3 tkinter.Text.delete(index1, index2=None) 删除内容

import tkinter

root = tkinter.Tk()
root.title('tkinter.Text Example')
width = 300 
height = 300

root.geometry(f'{width}x{height}')
text = tkinter.Text(root, width=40, height=10)
text.pack()

text.insert('1.0', '这是文本框,你可以输入任何内容')
text.delete('1.0', '1.6')

root.mainloop()

效果就是:字符串 这是文本框, 被删除掉了
在这里插入图片描述

4 tkinter.Text.get(index1, index2=None) 获取内容

import tkinter

root = tkinter.Tk()
root.title('tkinter.Text Example')
width = 300 
height = 300

root.geometry(f'{width}x{height}')
text = tkinter.Text(root, width=40, height=10)
text.pack()

text.insert('1.0', '这是文本框,你可以输入任何内容\n')
ssss = text.get('1.0', '1.7')
text.insert(tkinter.END, ssss)

root.mainloop()

在这里插入图片描述

5 带滚动条的text控件

import tkinter
from tkinter.constants import (HORIZONTAL, VERTICAL, RIGHT, LEFT, X, Y, BOTH, BOTTOM, YES, NONE, END, CURRENT)

root = tkinter.Tk()
root.title('滚动条Text Example')
text = tkinter.Text(root,width=50,height=8, wrap=NONE)
scroll = tkinter.Scrollbar()
# 放到窗口的右侧, 填充Y竖直方向
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)
# 两个控件关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
text.pack()

str1 = 'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n' \
       'Hello , Python \n'
 
text.insert(tkinter.INSERT,str1)

root.mainloop()

在这里插入图片描述

  • yscrollcommand 使Text控件可以垂直滚动。yscrollcommand=scrollbar_v.set,将Scrollbar与 Text绑定。
  • xscrollcommand 使Text控件可以水平滚动。xscrollcommand=scrollbar_h.set,将Scrollbar与 Text绑定。
  • wrap wrap属性,用来控制当一行的内容太多,超出Text的width时,文本的内容怎样显示。简单讲就是控制自动换行。WORD表示单词换行;CHAR(default)表示字符换行;NONE 表示不自动换行。
  • config()上面的例子中,Scrollbar与Text的绑定是在Text对象创建时,"静态"绑定的。能否"动态"绑定呢?答案是肯定的。就是使用config函数。通过查看源码发现,Text类中并没有config函数,其实config函数是从Misc继承过来的。

6 tkinter.Text.count() 统计字数

import tkinter

root = tkinter.Tk()
root.title('tkinter.Text Example')
width = 300 
height = 300

root.geometry(f'{width}x{height}')
text = tkinter.Text(root, width=40, height=10)
text.pack()

text.insert('1.0', '这是文本框,你可以输入任何内容\n')
text.insert(tkinter.END, text.count('1.0', tkinter.END))

root.mainloop()

换行\n两个字符
在这里插入图片描述

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDamogu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值