分享

python也可以编写GUI程序,你知道吗?

 gjzh090 2022-02-04

python也可以用来编写GUI程序且是跨平台的,既可以在windows平台运行也可以在linux平台运行,是不是很有吸引力。

在前面我写过一篇通过web界面与cgi脚本交互进而实现数据持久化的文章,这里我们依然用数据持久化的例子来写,但这里是用python代码来编写交互界面。

在我们开始前,请确保你已经安装了python-tkinter 模块依赖,否则以下代码将不能在你的机器上运行。

一、用到的相关控件

为了使程序尽量简单且功能完善,我们不会编写各种异处理常相关代码,我们以能说明问题为目的,所以这里用到的控件很简单,只有以下几个:Label、Entry、Button、Frame、Tk。

Label 用来标识显示或者更新的是哪一项;

Entry 用来显示信息;

Button 用来响应用户鼠标事件;

Frame 用来布局;

Tk是根组件,可以理解为一个window;

为了用这些组件,首先需要引入相关库,并定义一些全局变量,如下代码:

from tkinter import *import pickle import osstudent_keys = ('name', 'gender', 'age', 'score')# 各项数据对应的widgetentries = {}

二、需要处理的事件

我们这里需要处理3个按钮事件,一个是加载数据事件,一个是更新数据事件,一个是退出程序事件。

加载数据事件代码如下:

def load_student():    if os.path.exists('student.data'):        with open('student.data', 'rb') as file:            student = pickle.load(file)        student = student or {}    else:        student = {}         if not student:        student = dict.fromkeys(student_keys, '')    for item_key in student_keys:        # 清空内容        entries[item_key].delete(0, END)        # 设置内容        entries[item_key].insert(0, student[item_key])

更新数据事件代码如下:

def save_student(): if os.path.exists('student.data'): with open('student.data', 'rb') as file: student = pickle.load(file) student = student or {} else: student = {} if not student: student = dict.fromkeys(student_keys, '') for key in student_keys: if key in entries and entries[key].get().strip(): student[key] = entries[key].get().strip() with open('student.data', 'wb') as file: pickle.dump(student, file)

entries是个全局变量,保存着当前各项信息内容。

退出程序事件代码比较简单,调用根组件的quit方法就行,这里就不再单独写了,下面代码有写。

三、GUI 布局与交互

剩下的工作就是创建各个组件并布局以及注册各个事件了,如下代码:

# 首先创建一个窗口window = Tk()# 设置窗口显示的标题window.title('Student Score Demo')# 在窗口内创建放置数据的表单table = Frame(window)table.pack(expand=True)# 对各项数据创建布局font=('Helvetica', 20)row = 0for index, item_key in enumerate(student_keys):    label = Label(table, text=item_key, font=font)    entry = Entry(table, font=font)    label.grid(pady=5, row=index, column=0)    entry.grid(pady=5, row=index, column=1, columnspan=2)    entries[item_key] = entry    row = indexrow = row + 1load_btn = Button(table, text='load', font=font, command=load_student)load_btn.grid(padx=5, row=row, column=0)save_btn = Button(table, text='save', font=font, command=save_student)save_btn.grid(padx=5, row=row, column=1) quit_btn = Button(table, text='quit', font=font, command=window.quit)quit_btn.grid(padx=5, row=row, column=2)# 进入事件循环window.mainloop()

四、验证程序的运行

程序启动后会创建一个窗口,如下截图:

文章图片1

程序启动界面

我们填入以下各项信息:

文章图片2

填入各项信息

这时点击'save’按钮就会触发save_student代码的执行,然后点击'quit’按钮退出程序。

当下次启动程序时点击'load’按钮就会触发load_student代码的执行,就能看到上面填入的各项信息了,可以自己动手试一下哦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多