tkinter部件

一、Tk() & Label() & Button()

1,Tk() 窗口

用Tk()创建窗口对象:

#文件名:test1.py
import tkinter as tk
window = tk.Tk() #创建一个窗口对象window
window.title('my window') #设置window标题
window.geometry('400x400') #设置window大小

#中间填写window的内容

window.mainloop() #不断刷新窗口

效果如图:

2,Label() 标签

用Tk()创建窗口对象后,在窗口中用Label()创建标签对象

#文件名:test1.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

#创建一个标签对象l
l = tk.Label(window, #使标签位于window中
    text='my label', #设置标签文字
    bg='green', #设置标签背景色
    font=('Arial',12), #设置标签文字字体字号
    width=15, #设置标签宽度,15表示15个字符的高度
    height=2) #设置标签高度,2表示2个字符的宽度
l.pack() #设置标签位置

window.mainloop()

效果如图:

3,Button() 按钮

再用Button()创建一个按钮对象:

#文件名:test1.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

l = tk.Label(window,
    text='my label',
    bg='green',
    font=('Arial',12),
    width=15,
    height=2)
l.pack()

#创建一个按钮对象b
b = tk.Button(window, #使按钮位于window中
    text='my button', #设置窗口文字
    width=15, #设置窗口宽度
    height=2) #设置窗口高度
b.pack() #设置窗口位置

window.mainloop()

效果如图:

当然啦,按钮是拿来使用的,需要给按钮添加特定的功能。

这里我们给按钮添加一个简单的小功能:点击按钮,显示标签文字,再次点击按钮,隐藏标签文字,再次点击按钮,显示标签文字······

效果如下:



这需要在按钮的属性中添加command=hit,hit是一个函数,用来控制标签文字的显示与隐藏,command=hit的意思是点击按钮时将会执行hit函数。

接下来要定义hit函数,hit函数控制标签文字的显示与隐藏,那么可以将标签文字作为一个字符串变量,如果该变量为'my label',则点击时将其赋值为空字符串,如果该变量为空字符串,则点击时将其赋值为'my label'。

具体代码如下:

#文件名:test1.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

var = tk.StringVar() #设置var为tk中的StringVar变量
l = tk.Label(window,
    textvariable=var, #设置标签文字为var,注意要把text改为textvariable
    bg='green',
    font=('Arial',12),
    width=15,
    height=2)
l.pack()

on_hit = False #设置变量on_hit用来表示标签文字状态,False表示空,True表示非空
def hit():
    global on_hit
    if on_hit == False: #如果标签文字为空
        var.set('my label') #将其设为'my label'
        on_hit = True #更新标签文字状态
    else: #否则
        var.set('') #将其设为空
        on_hit = False #更新标签文字状态

b = tk.Button(window,
    text='my button',
    width=15,
    height=2,
    command=hit) #点击时执行hit函数
b.pack()

window.mainloop()

效果如图:



我们在定义var时没有设置其初始值,因此一开始标签文字为空。如果要给var设置初始值'my label',可以在定义var的下一行写上var.set('my label'),注意不能在定义时直接设置初始值var = tk.StringVar().set('my label')

另外,var是tk中定义的StringVar变量,要用set方法赋值,不能写var = 'my label'

二、Entry() & Text()

1,Entry() 输入框

用Entry()创建一个输入框对象:

#文件名:test2.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

#创建一个输入框对象e
e = tk.Entry(window, #使输入框位于window中
    show='*') #设置输入内容不可见,如果show=None则为可见,默认值为None
e.pack() #设置输入框位置

window.mainloop()

效果如图:

2,Text() 文本框

再用Text()创建一个文本框对象:

#文件名:test2.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

e = tk.Entry(window,
    show='*')
e.pack()

#创建一个文本框对象t
t = tk.Text(window, #使文本框位于window中
    height=2) #设置文本框高度
t.pack() #设置文本框位置
window.mainloop()

效果如图:



文本框和输入框有些类似,也可以在里面输入文字。一般将输入框用于输入用户名、密码等情况,而文本框则用于输入大段文字。

接下来我们实现这样一个效果:在输入框中输入文字,点击按钮,文字插入到文本框中。且有两种插入方式,一种是将文字插入到光标所在位置,另一种是将文字插入到文本框中文字的结尾。效果如下:



首先我们需要添加两个按钮,并定义两个函数,分别完成上述两种不同插入方式。

具体代码如下:

#文件名:test2.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

e = tk.Entry(window) #输入内容可见
e.pack()

def insert_point():
    var = e.get() #获得输入框e中的文字
    t.insert('insert',var) #将变量var插入文本框t中,'insert'表示从光标处插入
def insert_end():
    var = e.get()
    t.insert('end',var) #'end'表示从结尾处插入

b1 = tk.Button(window,
    text='insert_point',
    command=insert_point)
b1.pack()
b2 = tk.Button(window,
    text='insert_end',
    command=insert_end)
b2.pack()

t = tk.Text(window,
    height=2)
t.pack()
window.mainloop()

效果如图:



这里用insert方法实现了将文字插入文本框的两种不同方式,除了这里用到的'insert'、'end'外,还有一种更具体的插入方式t.insert(2.3,var),2.3表示将变量var插入到文本框的第2行第3列。

三、Listbox() 列表框

用Listbox()创建列表框对象:

#文件名:test3.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

var1 = tk.StringVar() #设置var为tk中的StringVar变量
var1.set([11,22,33,44]) #将var初始化为列表
# 创建一个列表框对象
lb = tk.Listbox(window, #使列表框位于window中
    listvariable=var1) #设置列表框内容为var
# 下面介绍几个更改列表框内容的方法
list_item = [1,2,3,4]
for item in list_item: #通过循环将列表list_item的元素插入到列表框中
    lb.insert('end',item)
lb.insert(1,'first') #在列表框第1行插入'first'
lb.insert(2,'second') #在列表框第2行插入'second'
lb.delete(2) #将列表框第2行元素删除,下面的元素会依次填充上来
lb.pack()

window.mainloop()

效果如图:



要注意的是,前面我们直接设置标签内容时,写上text='my label,之后通过StringVar变量来间接设置标签内容时,则是写上textvariable=var

上面我们在给列表框设置内容时是通过StringVar变量间接设置的,可能你会觉得我们在给列表框设置内容时,也可以直接写上list=[11,22,33,44],但和text不同,list是关键字,因此不能这么做,只能采用间接方式。

此外,上面的列表也可以替换为元组。

接下来我们实现这样一个效果:选择列表框中的某行,点击按钮,该行内容便显示在标签上。效果如下:

#文件名:test3.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

var1 = tk.StringVar()
l = tk.Label(window,
    textvariable=var1,
    bg='green',
    width=15,
    height=2)
l.pack()

def print_choose():
    value = lb.get(lb.curselection()) #获得列表框lb中被选中的内容,curselection也即cursor selection(鼠标选择)。
    var1.set(value) #将标签文字设为该内容

b = tk.Button(window,
    text='print choose',
    command=print_choose)
b.pack()

var2 = tk.StringVar()
var2.set([11,22,33,44])
lb = tk.Listbox(window,
    listvariable=var2)
lb.pack()

window.mainloop()

效果如图:

四、Radiobutton() 单选框

用Radiobutton()创建单选框对象:

#文件名:test4.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

var = tk.StringVar()

#创建一组单选框对象
r1 = tk.Radiobutton(window, #使单选框对象位于window中
    text='选项A', #设置单选框文字
    variable=var, #将这组单选框与变量var关联,用var表示当前的选择状态
    value='A') #相当于每个单选框的id
r1.pack()
r2 = tk.Radiobutton(window,
    text='选项B',
    variable=var,
    value='B',)
r2.pack()
r3 = tk.Radiobutton(window,
    text='选项C',
    variable=var,
    value='C',)
r3.pack()
#r1、r2、r3都与变量var关联(var必须为全局变量),说明它们构成一组单选框,且var表示当前选中状态。
#当选中r1时,变量var被赋值为r1的value,表示当前value='A'的单选框被选中。由于r2、r3的value不是'A',因此r2、r3变为未选中状态。
#如果r1、r2的value相同,比如都为'A',当选中r1时,r2同时被选中,r3变为未选中状态。

window.mainloop()

效果如图:

接下来我们实现这样一个效果:点击一组单选框中的某一个,标签中显示出对应提示。

效果如下:



选中单选框时,关联变量会被赋值为单选框的value属性,因此,只需定义一个函数,在标签文字中加上关联变量的值即可。

具体代码如下:

#文件名:test4.py
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

l = tk.Label(window,
    text='',
    bg='yellow',
    width=20)
l.pack()

var = tk.StringVar()
def print_choose():
    l.config(text='you have choose ' + var.get()) #使用config()可以设置对象的各项属性,这里我们将标签文字设为相应内容

r1 = tk.Radiobutton(window,
    text='选项A',
    variable=var,
    value='A',
    command=print_choose)
r1.pack()
r2 = tk.Radiobutton(window,
    text='选项B',
    variable=var,
    value='B',
    command=print_choose)
r2.pack()
r3 = tk.Radiobutton(window,
    text='选项C',
    variable=var,
    value='C',
    command=print_choose)
r3.pack()

window.mainloop()

效果如图:



在设置标签文字时,我们使用了text='you have choose ' + var.get(),这里不能直接将var与字符串'you have choose '连接。

【待解决的疑问】

上面例子中,单选框初始状态都是被选中,怎样将其初始状态改为未选中?

python tkinter学习——tkinter部件1的更多相关文章

  1. python GUI学习——Tkinter

    支持python的常见GUI工具包: Tkinter 使用Tk平台 很容易得到 半标准 wxpython 基于wxWindows.跨平台越来越流行 Python Win 只能在Windows上使用 使 ...

  2. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  3. python之GUI编程-tkinter学习

    推荐几个学习网址:https://www.cnblogs.com/shwee/p/9427975.html https://cloud.tencent.com/developer/section/13 ...

  4. Python Tkinter学习(1)——第一个Tkinter程序

    注:本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6885066.html.格式修改未完成. Tkinter资料 Python Wiki, T ...

  5. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...

  6. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  7. Python GUI编程(Tkinter)(一)

    tk官网的教程学习: https://tkdocs.com/tutorial/firstexample.html 学习blog: https://www.cnblogs.com/aland-1415/ ...

  8. 学习Tkinter

    tutorial point这个网站教程很多,无所不包.还包括一堆在线IDE,值得收藏 一.第一个tkinter程序 import tkinter top = tkinter.Tk() # Code ...

  9. Python GUI编程(Tkinter) windows界面开发

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py 1 #!C:\Python27\python.e ...

随机推荐

  1. Druid 详细介绍

    文章来自阿里巴巴 Druid是一个JDBC组件,它包括三部分:  DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可 ...

  2. BI服务器配置与客户端情况

    1. BI描述 FineBI是一款纯B/S端的商业智能分析服务平台:支持通过web应用服务器将其部署在服务器上,提供企业云服务器.用户端只需要使用一个浏览器即可进行服务平台的访问和使用.因此在配置使用 ...

  3. 一步一步学Vue(八)

    本篇完成如下场景: 1.系统包含首页.客户信息查询.登录三个模块 2.默认进入系统首页,如果要进行用户查询,则需要进行登录授权 3.查询用户后点击列表项,则进入详情页面 基于上述场景需求描述,在客户端 ...

  4. Nginx+keepalive局域网其它主机ping vip不通

    有两台高可用server server1  192.168.11.10 server2  192.168.11.11 vip :192.168.11.12 配置好keepalive之后在server1 ...

  5. Linux基本命令整理_sheng

    Linux版本 Linux系统是一个多用户.多任务的分时操作系统. Linux版本分为内核版本和发行版本. 常见的Linux发行版有: RedHat(分为用于企业的Red Hat Enterprise ...

  6. 4. leetcode 461. Hamming Distance

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  7. centos7安装docker并安装jdk和tomcat(常用命令)

    阿里专属的镜像加速 在宿主机器编辑文件:vi /etc/docker/daemon.json 阿里专属的镜像加速地址,类似于"https://91cntlkt.mirror.aliyuncs ...

  8. java 各种去空格的方法

    String str =" dgd fdgd ";   方法一:str = str.trim();//去前后空格 返回:dgd fdgd   方法二:str = str.repla ...

  9. 关于无法使用python执行进入百度页面的代码修改

    前几天听了个坑爹的视频教学,按照你们的方法做了,但尼玛,执行下来各种问题啊: 首先进入页面,总是提示开发者模式,删了下次执行又挂了,于是乎我就找网上帖子解决问题,果然被我解决了 先装这两个文件,把浏览 ...

  10. 如何使用Androidstudio创建一个新项目

    首先打开AS,然后 选择第一个选项Start a new Android Studio project 填写包名和项目名,点击next 选择项目类型,点击next 选择UI类型(都是死丢丢帮你生成的) ...