python tkinter详解

PYTHON TKINTER

Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的平台下使用,同样可以应用在 Windows 和 Mac系统里。

与tkinter齐名的还有wxpython,jython,pyqt(pyqt5)。其中,公认的对python新手而言的好用程度:jython<tkinter<wxpython<pyqt。(仅代表博主所看到的意见,没有反驳的必要

Tkinter编程

一个标准的用tkinter编写的GUI程序应当有以下几点:

1. tkinter模块的导入

2. 创建一个tkinter控件

3. 对于这个控件,指定master, 即这个控件属于哪一个

4. 告诉 GM(geometry manager) 有一个控件产生了

注:py3和py2的tkinter模块的导入存在差异(根据自己的python版本决定用什么,因为博主本人用的是py3,所以下面的代码都会是py3形式)

#python3
import tkinter

#python2
import Tkinter

tkinter模块并不需要额外的导入,python在安装的时候就有了tkinter了,所以不要去pip install tkinter了。

窗口框架

tkinter的每个程序都需要一个窗口的框架,其由导入+指定master+消息循环组成

import tkinter
root = tkinter.Tk()#通常习惯将这个变量名设置为root或者window
# 进入消息循环
root.mainloop()

Tkinter 标准属性

标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。

属性描述
Dimension控件大小
Color控件颜色
Font控件字体
Anchor锚点
Relief控件样式
Bitmap位图
Cursor光标

根据博主个人经历来说,Dimension, color, font, anchor 和 cursor是比较常用的控件,想要做到对于一个简单的GUI程序得心应手,这五个属性是一定要熟练的。(除此之外command也很重要)

Tkinter组件

Tkinter的提供各种控件,如按钮,标签和文本框,可以在一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

目前据博主所知,有15种比较常见的Tkinter的部件。博主提出这些部件以及一个简短的介绍,在下面的表:

控件名称描述
Button按钮控件;在程序中显示按钮。
Canvas画布控件;显示图形元素如线条或文本
Checkbutton多选框控件;用于在程序中提供多项选择框
Entry输入控件;用于显示简单的文本内容
Frame框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label标签控件;可以显示文本和位图
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton菜单按钮控件,用于显示菜单项。
Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message消息控件;用来显示多行文本,与label比较类似
Radiobutton单选按钮控件;显示一个单选的按钮状态
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text文本控件;用于显示多行文本
Toplevel容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox输入控件;与Entry类似,但是可以指定输入范围值
PanedWindowPanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFramelabelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox

用于显示你应用程序的消息框 

其中,最常用的有Button,Canvas,Checkbutton,Entry,Frame,Label。

Button控件

Button控件用于在 GUI程序中添加按钮,按钮上可以放上文本或图像,按钮可用于监听用户行为。可以与一个 函数关联,当按钮被按下时,会自动调用该函数。

语法:

Button(master, option=value, ... )
  • master: 按钮的父容器。

  • options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

 

实例:

import tkinter as tk #导入模块

root = tk.Tk() 
root.title("python萌新花花")
root.geometry("114x514") #欸嘿

b = 0

def addOne(): #一个方法,每次按button就给b+1
    global b
    b += 1
    print(b)

a = tk.Button(root, text = "看这里", command = addOne).pack() #button,这里面的command就是调用前面的addOne方法

root.mainloop() #不能少的东西

 效果:

Canvas控件

Python Tkinter 画布(Canvas)组件和 html5 中的画布一样,都是用来绘图的。可以将图形,文本,小部件或框架放置在画布上。

语法:

Canvas(master, option=value, ... )
  • master: 按钮的父容器。
  • options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

 canvas 支持的一些特殊的标准选项:

#arc:创建扇形(不知道为啥,但是基本每个有画图功能的库都有扇形)
places = 10, 50, 240, 210
arc = canvas.create_arc(places, start=0, extent=150, fill="blue")

#image:创建图像
name = PhotoImage(file = "sunshine.gif")
image = canvas.create_image(50, 50, anchor=NE, image=name)

#line:创建线条
line = canvas.create_line(x0, y0, x1, y1, ..., xn, yn, options)

#oval: 创建一个圆(或许可以是个椭圆)
oval = canvas.create_oval(x0, y0, x1, y1, options)

#polygon:创建一个多边形(至少有三个顶点)

poly = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)

实例:

import tkinter as tk #创建一个矩形,指定画布的颜色为白色

root = Tk()

cv = Canvas(root,bg = 'red') #创建一个Canvas,设置其背景色为红色
cv.create_rectangle(10,10,110,110) # 创建一个矩形,坐标为(10,10,110,110)
cv.pack()

root.mainloop()# 为明显起见,将背景色设置为红色,用以区别 root

效果:

 

Checkbutton控件

Python Tkinter 复选框用来选取需要的选项,它前面有个小正方形的方块,如果选中则有一个对号,也可以再次点击以取消该对号来取消选中。 

语法:

Checkbutton(master, option=value, ... )
  • master: 按钮的父容器。

  • options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

实例:

import tkinter as tk
 
root = tk.Tk()
root.title("python萌新花花")

var1 = tk.IntVar() #定义一个整型变量,可以被放进控件中,可以在程序中更改值
var2 = tk.IntVar()
c1 = tk.Checkbutton(root, text = "花花最棒了", variable = var1,
                 onvalue = 1, offvalue = 0, height=5,
                 width = 20)
c2 = tk.Checkbutton(root, text = "花花最厉害", variable = var2,
                 onvalue = 1, offvalue = 0, height=5,
                 width = 20)
c1.pack()
c2.pack()
root.mainloop()

 效果:

Entry控件

 Python Tkinter 文本框用来让用户 输入 一行 文本字符串。(一般搭配StringVar而不是前面的IntVar)

但是如果需要输入多行文本,可以使用Text组件;如果需要显示一行或多行文本且不允许用户修改,可以使用Label组件。

语法:

Entry( master, option, ... )
  • master: 按钮的父容器。

  • options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

实例:

import tkinter as tk
 
root = tk.Tk()
root.title("python萌新花花")

L1 = tk.Label(root, text="看过来")
L1.pack(side = tk.LEFT)
E1 = tk.Entry(root, bd =5)
E1.pack(side = tk.RIGHT)

root.mainloop()

 效果:

Label控件 (最最最最常用)

Python Tkinter 标签控件(Label)指定的窗口中显示的文本和图像。

  • 标签控件(Label)指定的窗口中显示的文本和图像。

  • 你如果需要显示一行或多行文本且不允许用户修改,你可以使用Label控件。

语法:

Label ( master, option, ... )
  • master: 框架的父容器。

  • options: 可选项,即该标签的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。

 实例:

import tkinter as tk
 
root = tk.Tk()
root.title("python萌新花花")

L1 = tk.Label(root, text="花花最可爱啦")
L1.pack()

root.mainloop()

效果:

Tkinter 练习:

制作一个GUI程序,可以让使用者输入账号和密码。密码以“ * ”的 形式显示。在使用者点下确定后,程序会和提前存在txt中的密码和账号匹配。如果不存在该账号或者密码错误,提示并且询问是否需要创建新账户。如果是,将新的账号和密码存在text中。

代码:

import tkinter as tk
import tkinter.messagebox
 
lan = "english"
getData = []
 
def signUp(usrName, usrPwd):
    with open('data.txt','a') as usrFile:
        usrFile.writelines("{}\n{}\n".format(usrName, usrPwd))
 
def compare():
    name = var_usr_name.get()
    pwd = var_usr_pwd.get()
    usrName, usrPwd = name,pwd
    getData = removeN()
    g = 0
    while(g<(len(getData)-1)):
        if usrName == getData[g] and g%2 == 0 and usrPwd == getData[g+1]:
            tk.messagebox.showinfo(title='login', message='Welcome, {}. You have successfully logged in.'.format(usrName))
            break
        g = g + 1
    if g == len(getData)-1:
        tk.messagebox.showwarning(title = "error",message = "The user name and password are incorrect.")
        
 
def removeN():
    asd = " "
    c = ""
    bd = []
    de = 0
    fg = "\n"
    with open('data.txt','r') as usrFile:
        asd = usrFile.readlines()
        for j in range(len(asd)):
            er = asd[j]
            pos = er.index(fg)
            cex = er[0:pos]
            bd.append(cex)
            de = 0
            cex = ""
        return bd
 
def language():
    global lan
    answer = False
    if lan == "english":
        answer = tk.messagebox.askquestion(title='language changing', message='Do you want to switch to Spanish?')
        if answer == "yes":
            lan = "spanish"
            d_name.set("elija el lenguaje")
            e_name.set("el nombre")
            f_name.set("cifra")
        else:
            pass
    elif lan == "spanish":
        answer = tk.messagebox.askquestion(title='language changing', message='Do you want to switch to English?')
        if answer == "yes":
            lan = "english"
            d_name.set("select language")
            e_name.set("user name")
            f_name.set("password")
        else:
            pass
    
 
window = tk.Tk()
window.title('Fake PowerSchool Help Students!')
window.geometry('500x500')
z = tk.Label(window,anchor = 'w',bg='white',
                    justify = 'center', width=500, height=500)
z.place(x = 0, y = 0)
a = tk.Label(window,anchor = 'w',text="PowerSchool SIS",
                    fg = 'white', bg='darkblue', font=('TimesNewRoman', 30),
                    justify = 'center', width=20, height=1)
a.place(x = 50, y = 100)
 
b = tk.Label(window,anchor='nw',text="Student and Parent Sign In",
             fg='black',bg='white',font=('TimesNewRoman',12),
             justify='center',width=50,height=20)
b.place(x = 50, y = 150)
 
c = tk.Button(window, text='language', width=15,
              height=2, command=language)
c.place(x = 270,y = 200)
 
d_name = tk.StringVar()
d_name.set("select language")
d = tk.Label(window,anchor='nw',textvariable=d_name,
             fg='black',bg='white',font=('TimesNewRoman',12),
             justify='center',width=20,height=2)
d.place(x = 50, y = 210)
 
e_name = tk.StringVar()
e_name.set("user name")
e = tk.Label(window,anchor='nw',textvariable=e_name,
             fg='black',bg='white',font=('TimesNewRoman',12),
             justify='center',width=50,height=1)
e.place(x = 50, y = 290)
 
f_name = tk.StringVar()
f_name.set("password")
f = tk.Label(window,anchor='nw',textvariable=f_name,
             fg='black',bg='white',font=('TimesNewRoman',12),
             justify='center',width=50,height=1)
f.place(x = 50, y = 350)
 
g = tk.Button(window, text='login', width=4,
              height=1, command=compare)
g.place(x = 330,y = 410)
 
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=270, y=290)
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=270, y=350)
 
window.mainloop()

效果:

 

  • 20
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Python TkinterPython 的标准 GUI 库,它提供了一系列的组件,如按钮、文本框、标签、菜单等,可以用于构建图形用户界面。Tkinter 是基于 Tcl/Tk 开发的,因此它具有跨平台的特性,可以在 Windows、Linux、Mac OS 等操作系统上运行。Tkinter 的使用非常简单,只需要导入 Tkinter 模块,创建一个窗口对象,然后在窗口对象上添加各种组件即可。Tkinter 还提供了事件处理机制,可以通过绑定事件来响应用户的操作。总之,Python Tkinter 是一个非常强大、易用的 GUI 库,适合用于开发各种桌面应用程序。 ### 回答2: Python TKinterPython 的标准 GUI(图形用户界面) 库,是 Python 最长寿的 GUI 工具包之一。Python 程序员能够通过它非常容易地创建 GUI 应用程序。这个库由 Tk 接口与其他一些库组成,其中最重要的是 tk 和 ttk。 GUI 系统显示的是图形用户界面,用户可以直接与应用程序进行交互,是一种方便用户操作的方式。常见的 TKinter 组件包括窗口、文本、标签、按钮、单选框、复选框、滚动条、下拉列表框、菜单、画布、框架等。 窗口和框架是 GUI 应用程序的基础,它们可以被认为是其他组件的容器。其中窗口是最外层的容器,它包含所有其他组件。框架是一种包含其他组件的容器,可以用于将组件组织成一组。 按钮组件是响应用户单击的组件,通常用于触发特定操作。它可以用以返回结果,启动程序,转换屏幕到另一个状态等。 文本和标签组件显示一段文字或给用户提供了一个展示数据的区域。它可以用于显示程序输出、问题等其他需要用户交互的场景。 复选框和单选框让用户来选择其中的一个或多个选项,而滚动条和下拉列表框则用于列表或滚动的文本框。 除此之外,还有菜单和画布等其他基本组件。菜单的作用是通过弹出菜单提供对程序设置和选项的访问,而画布的作用是可以用于绘制图形和图表等复杂的用户界面。综上所述,Python TKinter 组件是很完整的组件库,能够满足开发者应用程序的各种需求。 ### 回答3: Python tkinterPython的标准GUI(图形用户界面)库,它是一个用于构建GUI应用程序的集成开发环境(IDE)。Tkinter负责处理GUI的细节,包括窗口、控件、布局、事件等。它可以实现丰富的GUI应用程序和桌面应用程序,如游戏、音频播放器、文本编辑器等。 Tkinter的组件包括: 1.窗口(TkTkinter的窗口类是基于Tcl/Tk的有机结合,Tk是图形库,Tcl是一种编程语言。 2. 标签(Label) Label是Tkinter中常用的组件之一,它能够在窗口中展示文本或图片。 3.按钮(Button) Button是一个带有文本或图片的可点击的组件,用户可以使用它来触发事件或操作。 4.文本框(Entry) Entry是一个用于编辑用户输入的文本框,用户可以通过它输入数据。 5.下拉菜单(Menu) Menu是一个用于显示选项列表的组件,通常与菜单栏一起使用。 6.复选框(Checkbutton) Checkbutton是一个用于展示多个选项的组件,用户可以同时选择多个选项。 7.单选按钮(Radiobutton) Radiobutton也是一个用于展示多个选项的组件,但是只能选择其中的一个选项。 8.滚动条(Scrollbar) Scrollbar用于滚动一个组件中的内容,如文本框或列表等。 9.列表框(Listbox) Listbox是一个用于显示和编辑列表的组件,用户可以选择列表中的某个项目。 10.框架(Frame) Frame是一个用于组织其他组件的容器,它可以作为一个组件放置在窗口中。 11.画布(Canvas) Canvas是一个用于绘制图形和图像的组件,它支持多种绘图操作,如图形绘制、文本绘制、图像处理等。 总之,Python tkinter组件是实现GUI应用程序的重要工具,不仅可以实现简单的窗口、按钮等组件,还能够实现复杂的图形界面和多媒体应用程序。掌握这些组件的用法能够帮助开发者快速构建出美观、实用的GUI应用程序。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A Python 萌新花花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值