Python—Tkinter图形化界面设计——实现学生管理系统

目录

(一)问题描述:

(1)背景

(2)意义

(3)实际需求

(二)系统分析:

(三)系统设计:

1、系统架构设计:

2、界面设计:

3、模块划分:

(1)save()函数

(2)load()函数

(3)insert()函数

(4)show()函数

(5)find()函数

(6)delete()函数

(7)close()函数

(8)第八个模块

(四)系统实现:

1、各模块的实现过程:

(1)save()函数

(2)load()函数

(3)insert()函数

(4)show()函数

(5)find()函数

(6)delete()函数

(7)close()函数

2、关键代码段的注释和说明:

(1)root = Tk()

(2)with open('record.txt', 'w', encoding='utf8') as f:

(3)with open('record.txt', 'r', encoding='utf8') as f:

(4)studentId = simpledialog.askstring("输入窗口", "请输入学生的学号:")

(5)tkinter.messagebox.showinfo('Tips', f'[新增学生] 完毕!\n\n[存档成功] 共存储了 {len(students)} 条记录!')

(6)student_label = Label(show_window_2, text=f"[{s['studentId']}] {s['name']} {s['gender']} {s['className']}\n\n[读档成功] 一共读取了 {len(students)} 条记录!")

(7)name = simpledialog.askstring("输入窗口", "请输入要查找的同学姓名:")

(8)show_window_3 = Toplevel()

(9)student_label = Label(show_window_3, text=f"[{s['studentId']}] {s['name']} {s['gender']} {s['className']}\n\n[查找学生] 结束! 共找到了 {count} 个匹配的同学!")

(10)studentId = simpledialog.askstring("输入窗口", "请输入要删除的学生学号:")

(11)show_window_4 = Toplevel():

(12)student_label = Label(show_window_4, text=f"删除 {s['name']} 同学的信息!\n\n[删除学生] 结束!\n[读档成功] 一共读取了 {len(students)} 条记录!")

(13)show_window_5 = Toplevel()

(14)lb3 = Label(show_window_5, text='GoodBye!关闭后返回主窗口!\n\n防伪认证:\n\n制作人:黄明祯\n班级:23物联网工程1班\n学号:202308364115', font=('华文新魏', 16), fg='blue')

(15)root.mainloop()

(五)系统测试:

1、对于该学生管理系统,可以设计以下测试用例进行功能测试:

2、性能测试:

(六)课设总结:

1、课程设计过程中的收获:

2、在设计过程中,遇到了以下问题和解决方案:

3、对于面向对象程序设计的思考:


(一)问题描述:

(1)背景

随着教育信息化的深入发展,学生管理系统成为了教育机构不可或缺的重要工具。它能够有效地管理学生信息、课程安排和成绩统计等数据,为教育工作者提供便捷的管理手段。Python作为一种简洁、高效的编程语言,具有丰富的库和框架,使得开发学生管理系统变得更加轻松和高效。

(2)意义

学生管理系统的意义在于提高学生信息管理的效率和准确性,实现信息的规范管理、科学统计和快速查询。它是一个基于计算机的人机系统,通过集成各种功能和特点,使得学生信息管理更加便捷和高效。学生信息管理系统具有以下几个重要的意义:

  1. 提高工作效率:学生信息管理系统可以自动化处理学生信息,包括录入、存储、更新和查询等操作,大大减少了人工操作的时间和工作量,提高了工作效率。
  2. 规范管理:学生信息管理系统可以对学生信息进行规范化管理,包括学生基本信息、课程成绩、考勤记录等,确保信息的准确性和一致性,避免了手工管理中可能出现的错误和混乱。
  3. 科学统计:学生信息管理系统可以根据学生信息的特点和需求,进行科学的统计分析,例如学生人数统计、成绩分布分析等,为学校和教育管理部门提供决策依据。
  4. 快速查询:学生信息管理系统可以通过各种查询功能,快速检索和获取学生信息,例如按照学号、姓名、班级等条件进行查询,提高了信息的检索速度和准确性。
  5. 数据保护:学生信息管理系统具备健全的数据保护机制,包括数据备份、权限管理、数据加密等,确保学生信息的安全性和保密性。

(3)实际需求

学生管理系统的实际需求包括但不限于以下几点:

  1. 学生信息管理:系统应能记录每个学生的基本信息,如姓名、学号、性别、出生日期、所属班级等。 
  2. 课程信息管理:系统应能维护课程信息,包括课程名称、课程描述、学分等。 
  3. 成绩管理:系统应能记录并跟踪每个学生的学习成绩,包括各科目的考试成绩、平时成绩等。 
  4. 作业管理:系统应能布置、提交和评估学生的作业。 
  5. 通知管理:系统应能发送各类通知,如课程调整、考试通知、活动通知等。 
  6. 权限管理:系统应能对不同角色的用户(如教师、学生、管理员)进行权限管理。 
  7. 查询功能:系统应能根据不同的条件(如姓名、学号、班级等)查询学生信息。 

综上所述,学生管理系统的背景、意义和实际需求表明,它是现代教育管理中不可或缺的工具,能够显著提高教育管理的效率和质量。

(二)系统分析:

下面是我通过draw.io工具软件绘制,运用面向对象的分析方法,用于描述系统的功能需求和用户与系统之间的交互,建立系统的用例图的UML模型,如下图所示:

当然,在了解用例图之前,需了解其中符号表示的含义:

1、用例图主要由参与者(Actor)、用例(Use Case)、系统边界和箭头组成。

2、参与者代表系统中的角色,如用户、系统管理员等。

3、用例则代表系统能够提供的功能,如登录、查询、下单等。

4、系统边界用来区分系统内部和外部,箭头则表示参与者与用例之间的关系,如启动或参与用例的执行。

(三)系统设计:

其中包括系统架构设计、界面设计、模块划分等;

1、系统架构设计:

(1)安装相关的库才能使用相关功能:

import os.path(该库作用通过os.path来判断该文件是否存在)
import tkinter.messagebox(tkinter库中的提示子窗口)
from tkinter import *(安装thinker库)
from tkinter import simpledialog(该库可以作为对话框形式来输入)

(2)整个系统使用的是Tkinter库来创建GUI界面。

(3)使用Tk()函数创建顶层窗口root,作为系统的运行窗口。

2、界面设计:

(1)使用Label控件创建大标题"学生管理系统"。主界面窗口如下图:

(2)使用Button控件创建新增学生、显示学生、查找学生、删除学生和退出系统的按钮,通过点击按钮(如上图)实现新增学生、显示学生、查找学生、删除学生和退出系统的相应功能,从而对应的按钮进入不同的子窗口实现对应功能。

3、模块划分:

我设计的学生管理系统包括七个主要函数模块:

(1)save()函数

用于存档,将学生信息保存到文件中。

(2)load()函数

用于读档,从文件中读取学生信息。

(3)insert()函数

用于新增学生信息,并在子窗口中显示提示消息。

(4)show()函数

用于显示学生信息,并在子窗口中显示学生记录。

(5)find()函数

用于查找学生信息,并在子窗口中显示相关学生记录。

(6)delete()函数

用于删除学生信息,并在子窗口中显示相关操作提示。

(7)close()函数

用于关闭系统,并在子窗口中显示相关信息。

其中这七个主要函数模块中,包括了子窗口的创建等相关功能,

(8)第八个模块

是对主窗口界面的布局设计和安排。

(四)系统实现:

其中包括详细描述各模块的实现过程,关键代码段要给出注释和说明

1、各模块的实现过程:

(1)save()函数

使用with open语句打开文件,然后依次将学生信息写入文件中。

(2)load()函数

使用os.path.exists()判断存档文件是否存在,如果存在则使用with open语句打开文件,然后逐行读取学生信息并存储到列表中。

(3)insert()函数

使用simpledialog.askstring()函数获取用户输入的学生信息,并将学生信息添加到students列表中。然后创建子窗口显示提示消息和关闭按钮。

(4)show()函数

使用Toplevel()创建子窗口,然后使用Label控件和循环遍历显示所有学生信息,并创建关闭按钮。

(5)find()函数

使用simpledialog.askstring()函数获取用户输入的姓名,然后使用循环遍历查找匹配的学生信息,并在子窗口中显示相关学生记录和关闭按钮。

(6)delete()函数

使用simpledialog.askstring()函数获取用户输入的学号和姓名,然后使用循环遍历查找并删除匹配的学生记录,并在子窗口中显示相关操作提示和关闭按钮。

(7)close()函数

创建子窗口显示相关信息和关闭按钮。

2、关键代码段的注释和说明:

(1)root = Tk()

创建顶层窗口root作为系统的运行窗口。

(2)with open('record.txt', 'w', encoding='utf8') as f:

使用with open语句打开文件,然后将学生信息写入文件中。

如上图,写入的学生信息,约定把数据保存在和py文件同级目录中,文件名为record.txt,文件内容按照行文本的方式来表示,首先这是一个文本文件里面包含了很多行,每行代表一个学生,学生的信息之间,使用\t来分割。确保存档文件和程序文件处于同一目录下,来正确处理文件路径,并将创建的学生信息发在该文件中。

(3)with open('record.txt', 'r', encoding='utf8') as f:

使用with open语句打开文件,并逐行读取学生信息并存储到列表中。

(4)studentId = simpledialog.askstring("输入窗口", "请输入学生的学号:")

使用simpledialog.askstring()函数获取用户输入的学号。问题子窗口如下图:

(5)tkinter.messagebox.showinfo('Tips', f'[新增学生] 完毕!\n\n[存档成功] 共存储了 {len(students)} 条记录!')

提示子窗口如下图:

(6)student_label = Label(show_window_2, text=f"[{s['studentId']}] {s['name']} {s['gender']} {s['className']}\n\n[读档成功] 一共读取了 {len(students)} 条记录!")

创建Label控件显示学生记录。子窗口show_window_2如下图:

(7)name = simpledialog.askstring("输入窗口", "请输入要查找的同学姓名:")

使用simpledialog.askstring()函数获取用户输入的姓名。问题子窗口如下图:

(8)show_window_3 = Toplevel()

使用Toplevel()函数创建子窗口show_window_3。

(9)student_label = Label(show_window_3, text=f"[{s['studentId']}] {s['name']} {s['gender']} {s['className']}\n\n[查找学生] 结束! 共找到了 {count} 个匹配的同学!")

创建Label控件显示相关学生记录和查找结果。查找学生子窗口如下:

(10)studentId = simpledialog.askstring("输入窗口", "请输入要删除的学生学号:")

使用simpledialog.askstring()函数获取用户输入的学号。

(11)show_window_4 = Toplevel():

使用Toplevel()函数创建子窗口show_window_4。

(12)student_label = Label(show_window_4, text=f"删除 {s['name']} 同学的信息!\n\n[删除学生] 结束!\n[读档成功] 一共读取了 {len(students)} 条记录!")

创建Label控件显示相关操作提示和删除结果。

(13)show_window_5 = Toplevel()

使用Toplevel()函数创建子窗口show_window_5。

(14)lb3 = Label(show_window_5, text='GoodBye!关闭后返回主窗口!\n\n防伪认证:\n\n制作人:黄明祯\n班级:23物联网工程1班\n学号:202308364115', font=('华文新魏', 16), fg='blue')

创建Label控件显示相关信息。

(15)root.mainloop()

调用mainloop()方法进入事件循环,保持窗口处于运行状态。

(五)系统测试:

其中包括设计合理的测试用例,对系统进行功能测试和性能测试,并记录测试结果;

1、对于该学生管理系统,可以设计以下测试用例进行功能测试:

(1)测试新增学生功能:输入有效的学生信息,确认学生信息是否成功添加到列表中。

(2)测试显示学生功能:确认学生信息是否成功显示在子窗口中。

(3)测试查找学生功能:输入存在的学生姓名,确认是否能正确查找到相关学生信息。

(4)测试删除学生功能:输入存在的学生学号和姓名,确认是否能正确删除该学生信息。

(5)测试退出系统功能:确认系统能够正常关闭并返回主窗口。

2、性能测试

可以使用大数据量的测试数据,分别测试存档和读档功能的性能。可以创建一定量的学生信息,然后进行多次存档和读档操作,记录操作时间和内存占用情况,并分析系统在处理大数据量时的性能表现。

以下是一定量的操作测试:

(1)存档六条数据时页面显示:

(2)显示所有学生页面显示:

(3)查找学生页面显示:

(4)删除学生页面显示:

(5)退出程序页面显示:

(六)课设总结:

其中包括总结课程设计过程中的收获、遇到的问题及解决方案、对面向对象程序设计的思考等:

1、课程设计过程中的收获

在课程设计过程中,通过实践学习了Python编程语言和Tkinter库的使用,掌握了GUI界面的设计和交互功能的实现。同时,也加深了对面向对象程序设计的理解和运用能力。

2、在设计过程中,遇到了以下问题和解决方案:

(1)用户输入的合法性验证:

在新增学生功能中,需要验证输入的性别是否合法。通过判断用户输入的性别是否为’男’或’女’,来进行合法性验证。

(2)文件路径处理:

在存档和读档功能中,使用相对路径来指定存档文件的位置。通过确保存档文件和程序文件处于同一目录下,来正确处理文件路径。

3、对于面向对象程序设计的思考

        通过这个课程设计,我深刻理解了面向对象的核心思想:将程序分解成多个独立的对象,并通过对象之间的交互来完成程序的功能。面向对象的设计使得程序结构更加清晰、模块化,易于维护和扩展。同时,也学会了如何利用类和对象的特性来组织和管理代码,提高代码的可重用性和可维护性。

# 实现一个窗口版本的学生管理系统
#相关头文件
import os.path
import tkinter.messagebox
from tkinter import *
from tkinter import simpledialog

# 通过控制台和用户进行交互
# 创建窗口
root = Tk()
root.title('[学生管理系统]运行窗口')

# 初始化学生列表
# 使用这个全局变量, 来管理所有的学生信息.
# 这个列表的每个元素都是一个 "字典", 每个字典就分别表示了一个同学!
students = []

def save():
    """
       用于存档
    """
    # 此处的路径不是以 D: 开头的 "绝对路径" , 而是相对路径.
    # 此时这个写法的含义就是让 record.txt 和 当前的 学生管理系统.py 在同一个目录里.
    with open('record.txt', 'w', encoding='utf8') as f:
        for s in students:
            f.write(f"{s['studentId']}  {s['name']}    {s['gender']}    {s['className']}\n")
        print(f'[存档成功] 共存储了 {len(students)} 条记录!')

def load():
    """
    用于读档
    """
    # 如果存档文件不存在, 则直接跳过读档流程.
    # 为了避免读方式打开文件的时候, 文件不存在引起异常.
    if not os.path.exists('record.txt'):
        return

    # 读档的时候要保证先把旧的数据给清理干净!
    global students
    students = []
    with open('record.txt', 'r', encoding='utf8') as f:
        # 针对这一行数据, 按照 \t 进行切分操作!
        # 切分之前, 要去除末尾的换行.
        for line in f:
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'当前行格式存在问题! line={line}')
                continue
            student = {
                'studentId': tokens[0],
                'name': tokens[1],
                'gender': tokens[2],
                'className': tokens[3]
            }
            students.append(student)
    print(f'[读档成功] 共读取了 {len(students)} 条记录!')


def insert():
    # 新增学生窗口函数
    studentId = simpledialog.askstring("输入窗口", "请输入学生的学号:")
    name = simpledialog.askstring("输入窗口", "请输入学生的姓名:")
    gender = simpledialog.askstring("输入窗口", "请输入学生的性别:")
    if gender not in ('男', '女'):
        print('性别输入的内容不符合要求, 新增失败!')
        return
    className = simpledialog.askstring("输入窗口", "请输入学生的班级:")
    # 使用一个字典把上述的信息给聚合起来.
    student = {
        'studentId': studentId,
        'name': name,
        'gender': gender,
        'className': className
    }
    students.append(student)
    # 新增学生后立即保存
    save()
    tkinter.messagebox.showinfo('Tips', f'[新增学生] 完毕!\n\n[存档成功] 共存储了 {len(students)} 条记录!')


def show():
    # 显示学生信息窗口函数
    # 遍历全局变量的这个列表, 把每个学生的信息给打印出来.
    show_window_2 = Toplevel()
    show_window_2.geometry('480x320')
    show_window_2.title('显示学生信息')

    lb2 = Label(show_window_2, text='学生信息', font=('华文新魏', 16), fg='blue')
    lb2.pack()

    for s in students:
        student_label = Label(show_window_2, text=f"[{s['studentId']}]    {s['name']}    {s['gender']}    {s['className']}\n\n[读档成功] 一共读取了 {len(students)} 条记录!")
        student_label.pack()

    close_button = Button(show_window_2, text='关闭', command=show_window_2.destroy)
    close_button.pack()


def find():
    # 查找学生函数窗口和函数
    # 根据学生姓名, 来进行查找
    name = simpledialog.askstring("输入窗口", "请输入要查找的同学姓名:")
    show_window_3 = Toplevel()
    show_window_3.geometry('480x320')
    show_window_3.title('[查找学生]窗口')

    lb3 = Label(show_window_3, text='您查找的相关学生信息', font=('华文新魏', 16), fg='blue')
    lb3.pack()

    count = 0
    for s in students:
        if name == s['name']:
            student_label = Label(show_window_3, text=f"[{s['studentId']}]    {s['name']}    {s['gender']}    {s['className']}\n\n[查找学生] 结束! 共找到了 {count} 个匹配的同学!")
            student_label.pack()
        count += 1

    close_button = Button(show_window_3, text='关闭', command=show_window_3.destroy)
    close_button.pack()


def delete():
    # 删除学生信息函数窗口和函数
    studentId = simpledialog.askstring("输入窗口", "请输入要删除的学生学号:")
    # 看看这个学号对应的同学是哪个字典, 然后把这个字典从列表中删掉就好了!
    name = simpledialog.askstring("输入窗口", "请输入要查找的同学姓名:")
    show_window_4 = Toplevel()
    show_window_4.geometry('480x320')
    show_window_4.title('[删除学生]窗口')

    lb3 = Label(show_window_4, text='查找的相关的学生信息', font=('华文新魏', 16), fg='blue')
    lb3.pack()

    for s in students:
        if studentId == s['studentId']:
            student_label = Label(show_window_4, text=f"删除 {s['name']} 同学的信息!\n\n[删除学生] 结束!\n[读档成功] 一共读取了 {len(students)} 条记录!")
            student_label.pack()
            students.remove(s)
            save() # 删除学生后立即保存

    close_button = Button(show_window_4, text='关闭', command=show_window_4.destroy)
    close_button.pack()


def close():
    # 退出系统函数
    show_window_5 = Toplevel()
    show_window_5.geometry('480x320')
    show_window_5.title('[退出系统]窗口')

    lb2 = Label(show_window_5, text='\n\n\nGoodBye!关闭后返回主窗口!\n\n防伪认证:\n\n制作人:黄明祯\n班级:23物联网工程1班\n学号:202308364115', font=('华文新魏', 16), fg='blue')
    lb2.pack()

    close_button = Button(show_window_5, text='关闭', command=show_window_5.destroy)
    close_button.pack()


# 通过窗口和用户进行交互
def main():
    # 设置主窗口大小和背景颜色
    root.geometry('480x480')
    root.configure(bg='#d3fbfb')

    # 显示主窗口大标题"学生管理系统"
    lb1 = Label(root, text='学生管理系统', font=('华文新魏', 32), fg='blue')
    lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)

    # 添加各功能按钮
    # 通过按钮来作为可选菜单
    #按钮1:新增学生
    btn1 = Button(root, text='1. 新增学生', font=('华文新魏', 14), fg='black', command=insert)
    btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)

    # 按钮2:显示学生
    btn2 = Button(root, text='2. 显示学生', font=('华文新魏', 14), fg='black', command=show)
    btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)

    # 按钮3:查找学生
    btn3 = Button(root, text='3. 查找学生', font=('华文新魏', 14), fg='black', command=find)
    btn3.place(relx=0.1, rely=0.7, relwidth=0.3, relheight=0.1)

    # 按钮4:删除学生
    btn4 = Button(root, text='4. 删除学生', font=('华文新魏', 14), fg='black', command=delete)
    btn4.place(relx=0.6, rely=0.7, relwidth=0.3, relheight=0.1)

    # 按钮5:退出系统
    btn5 = Button(root, text='0. 退出系统', font=('华文新魏', 10), fg='red', command=close)
    btn5.place(relx=0.8, rely=0.9, relwidth=0.15, relheight=0.05)

#主窗口环境搭建,包括相关按钮和渲染
main()

# 在主窗口打开时自动调用load函数
load()

#结尾
root.mainloop()

这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python的界面。 Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现Python代码实在太短了(相比VB),有时候Python一行代码就可以实现VB一个函数的功能。 Python就是这种让人越用越开心的语言。 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准库Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的偶来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout布局,不够直观,而且用起来很不爽。。 至于PyQt/wxPython等GUI库,尽管有可视化设计工具,但总感觉做一般的轻量级应用是杀鸡用牛刀, 而且不够环保,不够低碳,要带一个很大的库,需要目标机器上夜同样安装了PyQt/wxPython,做不了绿色软件。 所以最终的结果是我更喜欢Tkinter,用起来很简单,绿色环保,真正的跨平台,一个py文件到处运行(担心泄密就编译成pyc)。 很多人都认为TK的界面不够美观,不过我经过多次实验后发现导入Python自带的标准TTK主题库,界面非常Native,不输PyQt/wxPython。 此Addin默认启用TTK支持,也可选择关闭。 总而言之,轻量级GUI,TK+TTK足够。 使用此Addin,你可以不用写一句代码就可以生成一个完整可运行的Python的GUI界面,支持2.X和3.X。 安装方法:将压缩包解压到你希望的目录,然后执行Setup.exe完成注册插件过程,打开VB6就可以用了。 在VB窗体上设计完成界面后(你可以大胆的设置各控件的属性,Addin尽量将其翻译为tkinter的控件属性),点工具栏上的VisualTkinter(图标为一片羽毛),再点'生成代码'按钮,即可生成可运行的Python代码,可以拷贝至剪贴板或保存至文件。 一般情况下你可以不用再改变tkinter的控件属性,但是如果你熟悉tkinter,需要更多的控制,可以一一核对各属性,并且修改,再生成代码。 当然除了用来设计界面外,此ADDIN内置的各控件属性列表可以做为编程参考,比较完整,除了极少数我认为大多数人都不用的属性外,属性定义基本上是我从官方的tkinter文档直接翻译的。 如果还没有VB6,网上找一个VB6精简版即可,不到20M,小巧玲珑。 代码已经在Github上托管,更新的版本可以在这上面找到,需求也可以在上面提: https://github.com/cdhigh/Visual-Tkinter-for-Python
这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python的界面。 Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现Python代码实在太短了(相比VB),有时候Python一行代码就可以实现VB一个函数的功能。 Python就是这种让人越用越开心的语言。 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准库Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的同学来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout布局,不够直观,而且界面简陋,用起来也不爽。 至于PyQt/wxPython等GUI库,尽管有可视化设计工具,但总感觉做一般的轻量级应用是杀鸡用牛刀,学习起来也比较复杂,而且不够环保,不够低碳,要带一个很大的库,需要目标机器上夜同样安装了PyQt/wxPython,做不了绿色软件。 所以最终的结果是我更喜欢Tkinter,用起来很简单,绿色环保,真正的跨平台,一个py文件到处运行(担心泄密就编译成pyc)。 很多人都认为TK的界面不够美观,不过导入Python自带的标准TTK主题库,界面非常Native,不输PyQt/wxPython。 此Addin默认启用TTK支持,也可选择关闭。 总而言之,轻量级GUI,TK+TTK足够。 使用此Addin,你可以不用写一句代码就可以生成一个完整可运行的Python的GUI界面,支持python 2.X和3.X。 安装方法:将压缩包解压到你希望的目录,然后执行Setup.exe完成注册插件过程,打开VB6就可以用了。 在VB窗体上设计完成界面后(你可以大胆的设置各控件的属性,Addin尽量将其翻译为tkinter的控件属性),点工具栏上的VisualTkinter(图标为一片橙红色羽毛),再点'生成代码'按钮,即可生成可运行的Python代码,可以拷贝至剪贴板或保存至文件。 一般情况下你可以不用再改变tkinter的控件属性,但是如果你熟悉tkinter,需要更多的控制,可以一一核对各属性,并且修改,再生成代码。 除了用来设计界面外,此ADDIN内置的各控件属性列表可以做为编程参考,比较完整,除了极少数我认为大多数人都不用的属性外,属性定义基本上是我从官方的tkinter文档直接翻译的。 如果还没有VB6,网上找一个VB6精简版即可(建议使用12M的版本,6M的版本也可以使用,不过工具栏图标无法显示,可以通过菜单执行此插件)。 经过网友测试,完美支持WinXP,Windows 7, Windows 8。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值