python tkinter 组件功能实例总结(代码+效果图)(Radiobutton | Button | Entry | Menu | Text)
Posted CDamogu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python tkinter 组件功能实例总结(代码+效果图)(Radiobutton | Button | Entry | Menu | Text)相关的知识,希望对你有一定的参考价值。
tkinter Components Example
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
- type是事件字符串的关键部分,用于描述事件的种类,比如鼠标事件、键盘事件等;
- modifier是事件的修饰部分,比如单击、双击等;
- detail用于事件的详情,比如指定鼠标左键、右键、滚轮等。
- 有兴趣的可以去查查
- 鼠标的相关事件
- 键盘的相关事件
- 组件的相关事件
- Bind()的取消绑定为:
Widght.unbind("<····>")
tkinter.Entry
Entry(输入框)组件通常用于获取用户的输入文本
如果你希望接收多行文本的输入,可以使用 Text 组件
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'widthxheight')
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'widthxheight')
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'widthxheight')
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'widthxheight')
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(defaPython GUI编程(Tkinter),python Tk()Frame()TopLevel()用法
目录
python Tk()、Frame()、TopLevel()用法
以上是关于python tkinter 组件功能实例总结(代码+效果图)(Radiobutton | Button | Entry | Menu | Text)的主要内容,如果未能解决你的问题,请参考以下文章
Python GUI编程(Tkinter),python Tk()Frame()TopLevel()用法
Python GUI编程(Tkinter),python Tk()Frame()TopLevel()用法
Python中使用tkinter创建透明图层不规则组件插入GIF动图等功能实现