Python——GUI编程

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。   图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。

与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。

        用户界面是我们使用者和计算机交互的一种方式,我们日常会使用到的QQ登录界面,QQ聊天界面,这些都属于图形用户界面。

   Python作为一种跨平台的强大语言,当然是可以进行图形界面的开发,在开发的过程中,由于第三方库的存在,有多种模块供我们选择。

模块名说明
TkinkerTkinter是一种标准的接口,这个模块存在于Python内部中供我们使用,它是一个轻量级的跨平台工具
wxPythonwxPython是一种较为流行的GUI模块
Flexx倾向于web方面的模块
KivyKivy是开源Python函式库,用于开发行动应用程序和其它采用自然用户界面的多点触控应用软件
PyQtPyQt 是 KDE 的底层 GUI 库的 Python 封装
PyGTKPyGTK 是 Gnome 的底层 GUI 库 GTK+ 的 Python 封装

        下面我们将会介绍较为常用的两种模块,分别是内置的Tkinker模块和wxPython模块,由于Tkinker是系统内置的,所有我们不需要下载就可以直接进行使用,而wxPython模块则需要我们从第三方库中下载使用。

Tkinter模块

 在Tkinter模块中有15个控件供我们使用,我们先对这些控件做一个简单的介绍。

    在Tkinter模块中有15个控件供我们使用,我们先对这些控件做一个简单的介绍。

    1) Button

    提供一个按钮,点击能触发事件。

    2) Canvas

    提供一个画布,即GUI界面的大小。

    3) Tk

    创建应用程序主窗口。

    4) Checkbutton

    可选择的多个按钮。

    5) Entry

    提供一个输入框,从键盘输入信息。

    6) Frame

    提供一个窗口,可以承载其他控件。

    7) Label

    提供一个标签,可以显示文字或者图片。

    8) Listbox

    提供一个列表框,可以从列表框中选择一个。

    9) Menu

    提供一个菜单栏,可以选择一个。

    10) Menubutton

    菜单按钮。

    11) Message

    消息文本框。

    12) Radiobutton

    单选的按钮,只能从多个按钮中选择其中的一个

    13) Scale

    滑动条。

    14) Scrollbar

    滚动条。

    15) Text

    提供一个文本供使用者输入信息。

    16) Toplevel

    创建一个弹出式窗口。

创建窗口

        要创建一个图形界面,首先要有一个窗口来供我们添加其他控件,添加窗口使用tkinter的Tk()函数,语法格式为:

window = tkinter.Tk()
window.mainloop()

window为我们创建的窗口名字,后面为使用方法,tkinter.mainloop()为注册调用管理器来响应事件,即启动这个窗口。看下面代码:

import tkinter
window = tkinter.Tk()
window.mainloop()

        如果要管理窗口的最大尺寸和最小尺寸的话采用下面的方式:

import tkinter
window = tkinter.Tk()
window.minsize(366, 366)#最小尺寸
window.maxsize(566, 566)#最大尺寸
window.mainloop()

 Label组件

        我们如果要在窗口内添加文本或者图片,可以使用Label控件,使用方式如下:

import tkinter
def main():
    win = tkinter.Tk()
    win.minsize(366, 366)#最小尺寸
    win.maxsize(888, 888)#最大尺寸
    area_one = tkinter.Label(win,text='This is area_one',font=("华文行楷", 20), fg="red")
    area_one.pack(side = 'left')
    area_two = tkinter.Label(win,text='This is area_two',font=("黑体", 20), fg="blue")
    area_two.pack(side = 'right')
    area_three = tkinter.Label(win,text='This is area_three',font=("宋体", 20), fg="black")
    area_three.pack()
    win.mainloop()
if __name__ == '__main__':
    main()

组件添加的形式为:

组件名 = tkinter.Label(放置的窗口,文本或图片,附加内容)
组件名.pack(side = ‘位置’)

我们根据对应信息把相应的内容填入,然后在通过pack定位一下信息,默认输出的是top

Frame控件

学完窗口和Label,如果在窗口中放入很多控件依靠定位很难控制管理,所以需要使用一个在窗口内管理控件的容器——Frame

å¾ç4.png

    area_two = tkinter.Label(frame_one,text = 'hahaha',font =("黑体",20),fg="blue")
    area_two.pack(side ='bottom')#放在下面
    frame_one.pack(side ='left')#左侧的容器
    frame_two = tkinter.Frame(win)#在名为win界面中的第二个Frame控件
    area_one =tkinter.Frame(frame_two,text = 'happy',font = ("华文行楷",20),fg="red")
    area_one.pack(side = 'top')
    area_two = tkinter.Label(frame_two, text='hahaha', font=("黑体", 20), fg="blue")
    area_two.pack(side = 'bottom')
    frame_two.pack(side = 'right')
    win.mainloop()
if __name__ == '__maim__' :
    main()
    print('win')

        运行结果为:

图片3.png

 Buttom控件

我们在进行图形界面开发的时候,按钮是必不可少的一项,按钮的作用为点击一次触发一次事件,我们可以通过按钮绑定函数进行事件的触发操作。

        先通过下表格来看一下Buuton控件中的相关可选项。

   我们在使用Button控件的时候常常会和tkinter模块中的messagebox模块一起使用,通过后者弹出消息框

import tkinter
import tkinter.messagebox
win = tkinter.Tk()
win.minsize(166, 40)  # 最小尺寸
def button_event():
    tkinter.messagebox.showinfo("Button事件", "欢迎进入Python教学")
button_one = tkinter.Button(win, text = "www.dotcpp.com", command = button_event)
button_one.pack()
win.mainloop()

运行后会出现如下的窗口。

图片5.png

        点击这个按钮会出现下面的窗口。                 

图片6.png

 Entry控件

  Entry控件的作用是在键盘输入的文本信息,它的语法格式如下:

my_entry = Entry(容器,可选项)

        容器即内容放入的位置,可选项和上一节我们学习提到的Button中的可选项类似, 可选择的有:

样式

功能

bg和bd

背景颜色和边框大小

cursor光标的形状
font文本字体
exportselection

文本框内容是否复制功能

fg文字颜色
highlightcolor边框高亮的颜色
justify对齐方式
relief边框样式
selectbackground

选择的文本背景颜色

selectborderwidth选择的文本背景边框宽度
selectforeground选择的文字颜色
state只读或可写控制
textvariable文本框的值
width文本框宽度
xscrollcommand水平方向滚动条

    2. Entry控件常用的方法

        1) delete(first, last=None) 

        删除first-last中的所有内容,如果使用delete(0,END)则删除输入框的所有内容

        2)  get()

        获取输入框内的所有内容

        3)  icursor(index)

        移动光标到index参数的位置

        4)  index(index) 

        返回index参数对应的序号

        5)  insert(index, text) 

        把text参数中的内容插入到索引为index的位置

        6)  Select_clear()

        清空文本框

        7) xview ( index )

        设置文本框链接的水平滚动条

        3. Entry控件的使用

        我们通过实例来使用一下Entry控件。

例如:

import tkinter
win = tkinter.Tk()
Frame_one = tkinter.Frame(win)#先创建一个容器放上面存放登录
Frame_one.pack(side = 'top')
Frame_two = tkinter.Frame(win)#再创建一个容器放中间存放密码
Frame_two.pack()
Frame_three = tkinter.Frame(win)#再创建一个容器在下面存放按钮
Frame_three.pack(side = 'bottom')
Label_one = tkinter.Label(Frame_one,text = '姓名:')
Lable_two = tkinter.Label(Frame_two,text = '密码:')
Entry_one = tkinter.Entry(Frame_one,bd = 5)
Entry_two = tkinter.Entry(Frame_two,bd = 5)
Button_one = tkinter.Button(Frame_three,text = '登录',activeforeground = 'red',activebackground = 'yellow',width = '7')
Button_one.pack(side = 'left')
Button_two = tkinter.Button(Frame_three,text = '注册',activeforeground = 'blue',activebackground = 'pink',width = '7')
Button_two.pack(side = 'right')
Label_one.pack(side = 'left')
Entry_one.pack(side = 'right')
Lable_two.pack(side = 'left')
Entry_two.pack(side = 'right')
win.mainloop()

activeforeground,activebackground为点击按钮时分别出现红字黄色的背景。

       输出结果为:

图片1.png

        我们首先在窗口中放置了三个容器,从上到下依次存放姓名、密码和按钮,然后再姓名后面放一个Entry控件,供我们输入姓名,在密码对应的后面放一个Enrty控件来输入密码,最后在下面放两个按钮分别提供登录和注册,最后我们把他们的位置放在左右一一对应。

假如你嫌datetime这个包名称太长,想要给它取个别名,以后每次用到它的时候都用它的别名代替它,这时就需要用到import…as,例子如下:

import datetime as dt

我们再通过函数绑定测试登录信息 

#一共创建了三个Frame容器。
import tkinter as tk
import tkinter.messagebox
 
win = tk.Tk()
 
frame_name = tk.Frame(win)#创建容器来存放登陆name的Label(文本框)与Entry(输入框)
 
frame_name.pack(side="top")#使该容器在页面的顶部
label_name = tk.Label(frame_name, text="Your Name : ")
label_name.pack(side="left")
entry_name = tk.Entry(frame_name, bd=5)
entry_name.pack(side="right")#在容器内创建Label与Entry,并使label在左,entry在右
 
# 下面的同理:
frame_password = tk.Frame(win)#创建容器用来存放登录password的Label(文本框)与Entry(输入框)
frame_password.pack()
label_password = tk.Label(frame_password, text="Your Password : ")
label_password.pack(side="left")
entry_password = tk.Entry(frame_password, bd=5)
entry_password.pack(side="right")
 
 
def login():
    if entry_name.get() == "qy":
        if entry_password.get() == "dotcpp":
            print(tkinter.messagebox.showinfo("login", "Success!"))
        else:
            print(tkinter.messagebox.showerror("login", "Failed!"))
            entry_name.delete(0, "end")
            entry_password.delete(0,"end")
    else:
        print(tkinter.messagebox.showerror("login", "Failed!"))
        entry_name.delete(0, "end")
        entry_password.delete(0,"end")
 
def signin():
    print(tkinter.messagebox.showerror("signin", "Without Code!"))#必须先定义函数,否则点击按钮调用函数时会报函数不存在的错误
 
frame_button = tk.Frame(win)#创建容器以存放按钮
frame_button.pack(side="bottom")#使该容器位于页面最下方
button_login = tk.Button(
    frame_button,
    text="login",
    activeforeground="red",
    activebackground="yellow",
    width="7",
    command=login
# command的意思是执行已定义的函数,不可执行下文中出现的函数(未定义的函数)
)
button_login.pack(side="left")
 
# 下面的同理:
button_signin = tk.Button(
    frame_button,
    text="signin",
    activeforeground="blue",
    activebackground="pink",
    width="7",
    command=signin,
)
button_signin.pack(side="right")
 
win.mainloop()

在Tkinter包下的message模块下提供了大量的工具函数来生成各种下消息框
messagebox的工具函数大致分为图标区、提示区和按钮区
在这里插入图片描述

        输出的界面为:

123.jpg

        当我们输入qy和dotcpp时如下:

12222.jpg

        如果输入其他内容显示如下:

        

QQ截图20200506222105.jpg

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Laborious_XDU

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

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

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

打赏作者

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

抵扣说明:

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

余额充值