python的简单随机排序GUI界面化小程序

简介

  • 该程序为自主学习所做,主要功能如下:

  1. 增添个人信息(主要展现为姓名)。

  1. 查询所添加的姓名信息。

  1. 生成随机序列

  • 原理讲解:

  1. 首先通过tkinter创建GUI界面

  1. 将各个功能封装成类

  1. 将输入的文本(姓名)信息转化为array数组,然后将其append到一个数组中

  1. 通过读取数组中的元素实现查看所有录入的信息

  1. 判断已知数组的长度,然后生成等长的不重复的随机数数组

  1. 然后通过随机数组对保存有信息的数组进行索引生成行的数组即随机排序结果

  1. 所有结果的显示均通过tabulate的grid形式输出以保证整体的美观

代码实现

引用相应的包

import numpy as np
from tabulate import tabulate
import random
from tkinter import *
import os

GUI界面

# 设置窗口
    def set_init_window(self):
        self.init_window_name.title("随机排序")  # 窗口名
        self.init_window_name.geometry('500x550+380+100')  # 290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
        # #窗口背景色,其他背景色见:blog.csdn.net/chl0000/article/details/7657887 self.init_window_name.attributes("-alpha",
        # 0.9)                          #虚化,值越小虚化程度越高 标签
        self.init_data_label1 = Label(self.init_window_name, text="姓     名:", font=('Arial', 15), width=10)
        self.init_data_label1.place(x=75, y=50, anchor='nw')
        # 文本框
        self.init_data_Text = Text(self.init_window_name, width=20, height=1, bg="white", fg="black", font=("宋体", 14),
                                   bd='0')  # 原始数据录入框
        self.init_data_Text.place(x=190, y=50, anchor='nw')

        self.init_data_Text1 = Text(self.init_window_name, width=450, height=300, bg="white",
                                    fg="black", font=("宋体", 14),
                                    bd='0')  # 结果输出框
        self.init_data_Text1.place(x="25", y="200", width="450", height="300")
        # 按钮
        self.str_trans_to_md5_button = Button(self.init_window_name, text="添加", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.add_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=40, y=120, anchor='nw')
        self.str_trans_to_md5_button = Button(self.init_window_name, text="查询", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.show_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=200, y=120, anchor='nw')
        self.str_trans_to_md5_button = Button(self.init_window_name, text="生成", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.split_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=360, y=120, anchor='nw')
        self.init_data_label2 = Label(self.init_window_name, text="@Author:", font=('宋体', 13), width=10)
        self.init_data_label2.place(x=120, y=160, anchor='nw')
        self.init_data_label3 = Label(self.init_window_name, text="聪明的波波", font=('宋体', 13), width=10)
        self.init_data_label3.place(x=250, y=160, anchor='nw')
        path = StringVar()
        path.set(os.path.abspath(".."))

设置界面函数

def gui_start():
    init_window = Tk()  # 实例化出一个父窗口
    ZMJ_PORTAL = MY_GUI(init_window)
    # 设置根窗口默认属性
    ZMJ_PORTAL.set_init_window()
    init_window.mainloop()  # 父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示

功能函数

增加
    def add_date(self):
        src = self.init_data_Text.get(1.0, END)
        if len(src) <= 1:
            self.init_data_Text.delete(1.0, END)
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "请不要输入空白信息!!!")
        else:
            src = np.array(src)
            a.append(src)
            self.init_data_Text.delete(1.0, END)
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "添加成功")
查看所添加内容
    def show_date(self):
        self.init_data_Text1.delete(1.0, END)
        if len(a) < 1:
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "暂无内容,请先添加有效信息!")
        else:
            c = []
            b = a
            b = np.array(b)
            b = b.reshape(-1, 1)
            b = b[:, 0]
            tmp = np.arange(len(a))
            c.append(tmp)
            c = np.array(c)
            b = b[c]
            b = b.T
            title = ['序号', '姓名']
            self.init_data_Text1.insert(1.0, tabulate(b, headers=title,
                                                      tablefmt='grid', showindex=np.arange(1, len(a)+1)))
生成随机序列
    def split_date(self):
        self.init_data_Text1.delete(1.0, END)
        if len(a) < 1:
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "暂无内容,无法生成!")
        else:
            self.init_data_Text1.delete(1.0, END)
            c = []
            b = a
            b = np.array(b)
            b = b.reshape(-1, 1)
            b = b[:, 0]
            tmp = random.sample(range(len(a)), len(a))
            c.append(tmp)
            c = np.array(c)
            title = ['序号', '名称']
            result = b[c]
            result = result.T
            self.init_data_Text1.insert(1.0, tabulate(result, headers=title, tablefmt='grid',
                                                      showindex=np.arange(1, len(a) + 1)))
生成等长且不重复的随机序列
random.sample(range(len(#所设置的数组)), len(#所设置的数组))

效果图

完整代码

import numpy as np
from tabulate import tabulate
import random
from tkinter import *
import os


LOG_LINE_NUM = 0
a = []


# 界面化
class MY_GUI:
    def __init__(self, init_window_name):
        self.init_data_label2 = None
        self.init_data_label3 = None
        self.init_data_Text1 = None
        self.init_data_label1 = None
        self.str_trans_to_md5_button = None
        self.log_data_Text = None
        self.result_data_Text = None
        self.log_label = None
        self.result_data_label = None
        self.init_data_label = None
        self.init_data_Text = None
        self.init_window_name = init_window_name

    # 设置窗口
    def set_init_window(self):
        self.init_window_name.title("随机排序")  # 窗口名
        self.init_window_name.geometry('500x550+380+100')  # 290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
        # #窗口背景色,其他背景色见:blog.csdn.net/chl0000/article/details/7657887 self.init_window_name.attributes("-alpha",
        # 0.9)                          #虚化,值越小虚化程度越高 标签
        self.init_data_label1 = Label(self.init_window_name, text="姓     名:", font=('Arial', 15), width=10)
        self.init_data_label1.place(x=75, y=50, anchor='nw')
        # 文本框
        self.init_data_Text = Text(self.init_window_name, width=20, height=1, bg="white", fg="black", font=("宋体", 14),
                                   bd='0')  # 原始数据录入框
        self.init_data_Text.place(x=190, y=50, anchor='nw')

        self.init_data_Text1 = Text(self.init_window_name, width=450, height=300, bg="white",
                                    fg="black", font=("宋体", 14),
                                    bd='0')  # 结果输出框
        self.init_data_Text1.place(x="25", y="200", width="450", height="300")
        # 按钮
        self.str_trans_to_md5_button = Button(self.init_window_name, text="添加", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.add_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=40, y=120, anchor='nw')
        self.str_trans_to_md5_button = Button(self.init_window_name, text="查询", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.show_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=200, y=120, anchor='nw')
        self.str_trans_to_md5_button = Button(self.init_window_name, text="生成", bg="lightblue", width=10,
                                              font=('黑体', 12), command=self.split_date)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md5_button.place(x=360, y=120, anchor='nw')
        self.init_data_label2 = Label(self.init_window_name, text="@Author:", font=('宋体', 13), width=10)
        self.init_data_label2.place(x=120, y=160, anchor='nw')
        self.init_data_label3 = Label(self.init_window_name, text="聪明的波波", font=('宋体', 13), width=10)
        self.init_data_label3.place(x=250, y=160, anchor='nw')
        path = StringVar()
        path.set(os.path.abspath(".."))

    # 功能函数
    def add_date(self):
        src = self.init_data_Text.get(1.0, END)
        if len(src) <= 1:
            self.init_data_Text.delete(1.0, END)
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "请不要输入空白信息!!!")
        else:
            src = np.array(src)
            a.append(src)
            self.init_data_Text.delete(1.0, END)
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "添加成功")

    def show_date(self):
        self.init_data_Text1.delete(1.0, END)
        if len(a) < 1:
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "暂无内容,请先添加有效信息!")
        else:
            c = []
            b = a
            b = np.array(b)
            b = b.reshape(-1, 1)
            b = b[:, 0]
            tmp = np.arange(len(a))
            c.append(tmp)
            c = np.array(c)
            b = b[c]
            b = b.T
            title = ['序号', '姓名']
            self.init_data_Text1.insert(1.0, tabulate(b, headers=title,
                                                      tablefmt='grid', showindex=np.arange(1, len(a)+1)))

    def split_date(self):
        self.init_data_Text1.delete(1.0, END)
        if len(a) < 1:
            self.init_data_Text1.delete(1.0, END)
            self.init_data_Text1.insert(1.0, "暂无内容,无法生成!")
        else:
            self.init_data_Text1.delete(1.0, END)
            c = []
            b = a
            b = np.array(b)
            b = b.reshape(-1, 1)
            b = b[:, 0]
            tmp = random.sample(range(len(a)), len(a))
            c.append(tmp)
            c = np.array(c)
            title = ['序号', '名称']
            result = b[c]
            result = result.T
            self.init_data_Text1.insert(1.0, tabulate(result, headers=title, tablefmt='grid',
                                                      showindex=np.arange(1, len(a) + 1)))


def gui_start():
    init_window = Tk()  # 实例化出一个父窗口
    ZMJ_PORTAL = MY_GUI(init_window)
    # 设置根窗口默认属性
    ZMJ_PORTAL.set_init_window()
    init_window.mainloop()  # 父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示


gui_start()

文件链接

代码文件链接:基于python的简单随机排序GUI界面化小程序-Python文档类资源-CSDN文库

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是小石呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值