Python进阶3—Python中GUI程序设计

GUI是图形窗口方式显示和操作的用户界面。GUI程序是一种基于事件驱动的程序。GUI程序执行后不会退出,程序在循环等待接收消息 或事件,然后根据事件执行相应的操作。Tkinter是Python的GUI标准模块,主要用来设计GUI 程序。

本章我们大致来讲一下Python中的Tkinter模块来了解Python中的可视化窗口

预备知识

事件驱动程序

事件驱动程序运行是由用户的动作(如鼠标按键,键盘按键等动作)或者是其他程序的消息来决定。

事件驱动程序的基本架构是先设计一个事件循环程序块,事件循环程序不断地检查要处理的事件信息,根据事件触发一个回调函数(也称为钩子函数)进行处理。 其中的事件可能来自键盘或鼠标的动作,也可能来自文件读写,或者是时间事件。

GUI(图形用户界面)类程序就是典型的事件驱动程序,计算机操作系统也是事件驱动程序的典型案例。

Label标签

Label标签一般用于显示文字或图片。

示例如下:

import tkinter as tk
window = tk.Tk()
window.title('示例') #窗口的标题
window.geometry('500x500') #窗口的大小
label = tk.Label(window,text='我是一个标签') #text为显示的文本内容
label.pack() #包管理器
window.mainloop() #事件触发主循环

Button按钮

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

语法格式如下:

button1 = tkinter.Button ( master, option=value, ... )

master: 按钮的父容器。

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

command:按钮关联的函数,当按钮被点击时,执行该函数

text:按钮的文本内容

bg:按钮的背景色

font:文本字体

button1 = tk.Button(root, text='点我', bg='Pink', font=('楷体', 14),command=hit_me)
button1.pack(side=tk.LEFT) #按钮位于容器的左侧

pack组件

组件在窗口中如何布置定位,可以用Pack组件管理器函数。

Pack函数通过设置锚点(anchor),它默认在父窗口中自顶向下添加组件。 它的语法格式如下:

pack(参数)

anchor:锚点。组件对齐方式,N=上、S=下、W=左、E=右、CENTER=中间

side:组件停靠在父组件的哪一边。如top、bottom、left、right

fill:填充方式。side='top'或'bottom'时,填充x方向;side='left'或'right'时,填充y方向;当expand='yes'时,填充父组件剩余空间。

ipadx, ipady:组件内部元素在x或y方向上填充

padx, pady:组件外部元素在x或y方向上填充

示例如下:

#导入模块
import tkinter as tk
#创建窗口root
root=tk.Tk()
#在窗口创建按钮button1
button1=tk.Button(root)
#按钮位于窗口左侧
button1.pack(side=tk.LEFT)

单行文本框Entry

功能:让用户输入一行文本字符串。

语法格式如下:

w = Entry( master, option, ... )

master: 按钮的父容器。

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

width:文本框宽度

textvariable:文本框的值,是一个StringVar()对象。

state:文本框状态。默认为 state=NORMAL,可写状态;readonly表只读状态。

from tkinter import *
root = Tk()
e1 = Entry(root, width=10, textvariable=v1, validate='key',validatecommand=(testCMD, '%P'))
e1.grid(row=0, column=0) #grid为网格管理器,e1位于1行1列

get()

单行文本框Entry的方法,可获取文件框的值

示例如下:

v1=Entry.get()

例题练习

第1关:事件驱动程序设计

本关任务:设计一个简单的GUI事件驱动程序,运行程序打开左图窗口,单击“点我"按钮,弹出右图对话框。  

代码解析

#导入模块
import tkinter as tk
from tkinter import *
import tkinter.messagebox
#下面的代码写在test函数中,请注意缩进
def test():
#*************Begin*****************#
    #创建主窗口,定义窗口标题和大小
    root = tk.Tk()
    root.title('主窗口')
    root.geometry('300x200')
    #自定义函数hit_me
    def hit_me():
        global s       #该语句不能删除
        #调用普通消息框,赋值给变量s,请补充下面语句中括号内的参数
        s=tkinter.messagebox.showinfo(title = "Hi", message = "你好!")    
    #设置标签文本、位置、间距
    textLabel =Label(root, text = '欢迎使用《Python应用程序设计》', justify = LEFT, padx = 10)
    textLabel.pack(side = TOP)
    #设置按钮1的文本、颜色、事件、位置
    button1 = tk.Button(root, text = "点我", bg = "Pink", font = ("楷体", 14),command = hit_me).pack(side = tk.LEFT)
    #设置按钮2的文本、颜色、事件、位置
    button2 = tk.Button(root, text = "退出", bg = "Pink", font = ("楷体", 14), command = root.quit).pack(side = tk.RIGHT)
    #事件触发主循环
    root.mainloop()
#*************End*****************#

第2关:简单计算器

本关任务:编写一个只能做加法运算的计算器程序。 运行界面如下:

在文本框中输入数值,单击“计算结果”按钮,在第三个文本框中显示和。

代码解析

from jsq_test import test_num
# 导入标准模块-图形用户接口
from tkinter import *                      
#创建窗口,设置好窗口标题
root = Tk()
root.title("计算器")
# 创建框架
frame = Frame(root)
frame.pack(padx = 10, pady = 10)
#定义三个StringVar对象,存储加数v1、被加数v2、和v3。
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
#验证参数是否为数字的函数
def test(content):
    return content.isdigit()
#用register方法将验证函数包装
testCMD = frame.register(test)
#设置第一个文本框
e1 = Entry(frame, width=10, textvariable=v1, validate='key',
    validatecommand=(testCMD, '%P')).grid(row=0, column=0)   
#设置“+”标签
Label(frame,text = '+').grid(row = 0, column = 1)
#设置第二个文本框
e2 = Entry(frame,width = 10, textvariable = v2, validate = 'key',validatecommand = (testCMD,'%P')).grid(row = 0, column = 2)
#设置“=”标签
Label(frame,text = '=').grid(row = 0, column = 3)
#设置结果标签
e3 = Entry(frame,width = 10, textvariable = v3,state = 'readonly').grid(row = 0, column = 4)
#计算和的函数
def calc():
    result = int(v1.get()) + int(v2.get())
    v3.set(str(result))   
    tag=test_num(result,int(v1.get()),int(v2.get()))
    if tag==1:  sys.exit()
#设置“计算结果”按钮    
Button(frame,text = '计算结果',command = calc).grid(row = 1,column = 2, pady = 5)
#窗口消息主循环
mainloop()

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值