欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python編寫一個(gè)學(xué)生姓名比較工具

 更新時(shí)間:2025年10月13日 10:08:45   作者:封奚澤優(yōu)  
這篇文章主要為大家詳細(xì)介紹了如何使用Python Tkinter編寫一個(gè)學(xué)生姓名比較工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本文介紹了一個(gè)基于Python Tkinter的學(xué)生姓名比較工具,在班級(jí)收集信息有時(shí)候是通過在線文檔或者微信群的接龍,會(huì)有查漏補(bǔ)缺的需求,一個(gè)個(gè)去比對(duì)太浪費(fèi)時(shí)間,這個(gè)時(shí)候可以通過程序來實(shí)現(xiàn)名單快速的核對(duì)。

該工具通過圖形界面提供兩個(gè)文本框用于輸入兩組學(xué)生姓名,支持逗號(hào)、分號(hào)、頓號(hào)、回車等多種分隔符。點(diǎn)擊"比較"按鈕后,程序會(huì)解析輸入的姓名,統(tǒng)計(jì)并顯示兩組學(xué)生總數(shù)、共同擁有的學(xué)生數(shù),以及每組獨(dú)有的學(xué)生名單。界面設(shè)計(jì)采用網(wǎng)格布局,包含可滾動(dòng)的文本區(qū)域和結(jié)果展示區(qū),窗口居中顯示且大小可調(diào)。該工具適用于快速對(duì)比兩組學(xué)生名單的差異,方便教育工作者進(jìn)行數(shù)據(jù)核對(duì)。

完整代碼

import tkinter as tk
from tkinter import ttk, messagebox
import re


class StudentComparator:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("學(xué)生姓名比較工具")
        self.root.resizable(True, True)

        # 設(shè)置窗口居中
        self.center_window(900, 700)

        # 創(chuàng)建界面
        self.create_widgets()

    def center_window(self, width, height):
        """將窗口居中顯示"""
        screen_width = self.root.winfo_screenwidth()
        screen_height = self.root.winfo_screenheight()

        x = (screen_width - width) // 2
        y = (screen_height - height) // 2

        self.root.geometry(f"{width}x{height}+{x}+{y}")

    def create_widgets(self):
        """創(chuàng)建界面組件"""
        # 主框架 - 使用grid布局以便更好地控制各區(qū)域大小
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 配置主框架的網(wǎng)格權(quán)重
        main_frame.columnconfigure(0, weight=1)
        main_frame.rowconfigure(1, weight=1)  # 文本區(qū)域行
        main_frame.rowconfigure(3, weight=1)  # 結(jié)果區(qū)域行

        # 說明標(biāo)簽
        instruction_label = ttk.Label(
            main_frame,
            text="請(qǐng)?jiān)谙路絻蓚€(gè)文本框中粘貼學(xué)生姓名列表(支持逗號(hào)、分號(hào)、頓號(hào)、回車等分隔符)",
            wraplength=800
        )
        instruction_label.grid(row=0, column=0, sticky="w", pady=(30, 10))

        # 創(chuàng)建左右兩個(gè)文本框的框架
        text_frame = ttk.Frame(main_frame)
        text_frame.grid(row=1, column=0, sticky="nsew", pady=(0, 10))

        # 配置網(wǎng)格權(quán)重,使兩側(cè)等寬
        text_frame.columnconfigure(0, weight=1)
        text_frame.columnconfigure(1, weight=1)
        text_frame.rowconfigure(0, weight=1)

        # 左側(cè)文本框和標(biāo)簽
        left_frame = ttk.Frame(text_frame)
        left_frame.grid(row=0, column=0, sticky="nsew", padx=(0, 5))

        left_label = ttk.Label(left_frame, text="第一組學(xué)生姓名:")
        left_label.pack(anchor=tk.W, pady=(0, 5))

        self.left_text = tk.Text(left_frame, wrap=tk.WORD)
        self.left_text.pack(fill=tk.BOTH, expand=True)

        left_scrollbar = ttk.Scrollbar(left_frame, orient=tk.VERTICAL, command=self.left_text.yview)
        left_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.left_text.config(yscrollcommand=left_scrollbar.set)

        # 右側(cè)文本框和標(biāo)簽
        right_frame = ttk.Frame(text_frame)
        right_frame.grid(row=0, column=1, sticky="nsew", padx=(5, 0))

        right_label = ttk.Label(right_frame, text="第二組學(xué)生姓名:")
        right_label.pack(anchor=tk.W, pady=(0, 5))

        self.right_text = tk.Text(right_frame, wrap=tk.WORD)
        self.right_text.pack(fill=tk.BOTH, expand=True)

        right_scrollbar = ttk.Scrollbar(right_frame, orient=tk.VERTICAL, command=self.right_text.yview)
        right_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.right_text.config(yscrollcommand=right_scrollbar.set)

        # 按鈕框架
        button_frame = ttk.Frame(main_frame)
        button_frame.grid(row=2, column=0, sticky="ew", pady=10)

        compare_button = ttk.Button(button_frame, text="比較", command=self.compare_names)
        compare_button.pack(side=tk.LEFT, padx=(0, 10))

        clear_button = ttk.Button(button_frame, text="清空", command=self.clear_text)
        clear_button.pack(side=tk.LEFT)

        # 結(jié)果框架 - 增加高度
        result_frame = ttk.LabelFrame(main_frame, text="比較結(jié)果", padding="5")
        result_frame.grid(row=3, column=0, sticky="nsew", pady=(10, 0))

        # 配置結(jié)果框架內(nèi)部的網(wǎng)格權(quán)重
        result_frame.columnconfigure(0, weight=1)
        result_frame.rowconfigure(0, weight=1)

        self.result_text = tk.Text(result_frame, wrap=tk.WORD, state=tk.DISABLED, font=("Arial", 10))
        self.result_text.grid(row=0, column=0, sticky="nsew")

        result_scrollbar = ttk.Scrollbar(result_frame, orient=tk.VERTICAL, command=self.result_text.yview)
        result_scrollbar.grid(row=0, column=1, sticky="ns")
        self.result_text.config(yscrollcommand=result_scrollbar.set)

    def parse_names(self, text):
        """解析文本中的姓名,支持多種分隔符"""
        # 使用正則表達(dá)式分割文本,支持中文標(biāo)點(diǎn)和換行符
        separators = r'[,,;;、\s\n]+'
        names = re.split(separators, text.strip())

        # 過濾空字符串并去除前后空格
        names = [name.strip() for name in names if name.strip()]

        return set(names)

    def compare_names(self):
        """比較兩個(gè)文本框中的姓名"""
        left_text = self.left_text.get("1.0", tk.END)
        right_text = self.right_text.get("1.0", tk.END)

        if not left_text.strip() and not right_text.strip():
            messagebox.showwarning("警告", "兩個(gè)文本框都為空,請(qǐng)輸入學(xué)生姓名!")
            return

        # 解析姓名
        left_names = self.parse_names(left_text)
        right_names = self.parse_names(right_text)

        # 找出不同的姓名
        only_in_left = left_names - right_names
        only_in_right = right_names - left_names
        common_names = left_names & right_names

        # 顯示結(jié)果
        self.result_text.config(state=tk.NORMAL)
        self.result_text.delete("1.0", tk.END)

        self.result_text.insert(tk.END, f"第一組學(xué)生總數(shù): {len(left_names)}\n")
        self.result_text.insert(tk.END, f"第二組學(xué)生總數(shù): {len(right_names)}\n")
        self.result_text.insert(tk.END, f"共同擁有的學(xué)生數(shù): {len(common_names)}\n\n")

        self.result_text.insert(tk.END, "僅在第一組中的學(xué)生:\n")
        if only_in_left:
            for name in sorted(only_in_left):
                self.result_text.insert(tk.END, f"  ? {name}\n")
        else:
            self.result_text.insert(tk.END, "  無\n")

        self.result_text.insert(tk.END, "\n僅在第二組中的學(xué)生:\n")
        if only_in_right:
            for name in sorted(only_in_right):
                self.result_text.insert(tk.END, f"  ? {name}\n")
        else:
            self.result_text.insert(tk.END, "  無\n")

        self.result_text.config(state=tk.DISABLED)

    def clear_text(self):
        """清空所有文本框"""
        self.left_text.delete("1.0", tk.END)
        self.right_text.delete("1.0", tk.END)
        self.result_text.config(state=tk.NORMAL)
        self.result_text.delete("1.0", tk.END)
        self.result_text.config(state=tk.DISABLED)

    def run(self):
        """運(yùn)行程序"""
        self.root.mainloop()


if __name__ == "__main__":
    app = StudentComparator()
    app.run()

結(jié)果圖如下 

到此這篇關(guān)于基于Python編寫一個(gè)學(xué)生姓名比較工具的文章就介紹到這了,更多相關(guān)Python學(xué)生姓名比較內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python有序字典簡單實(shí)現(xiàn)方法示例

    Python有序字典簡單實(shí)現(xiàn)方法示例

    這篇文章主要介紹了Python有序字典簡單實(shí)現(xiàn)方法,涉及Python使用OrderedDict方法進(jìn)行字典排序的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • django xadmin 管理器常用顯示設(shè)置方式

    django xadmin 管理器常用顯示設(shè)置方式

    這篇文章主要介紹了django xadmin 管理器常用顯示設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python多線程原理與用法詳解

    Python多線程原理與用法詳解

    這篇文章主要介紹了Python多線程原理與用法,簡單描述了多線程的概念、原理并結(jié)合實(shí)例形式分析了Python多線程創(chuàng)建、啟動(dòng)、各種鎖機(jī)制、隊(duì)列及相關(guān)函數(shù)使用技巧,需要的朋友可以參考下
    2018-08-08
  • pandas中df.groupby()方法深入講解

    pandas中df.groupby()方法深入講解

    在使用pandas進(jìn)行數(shù)據(jù)統(tǒng)計(jì)分析時(shí)遇到了問題,找了很久才找到解決辦法,所以下面這篇文章主要給大家介紹了關(guān)于pandas中df.groupby()方法的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 關(guān)于pygame.surface.blit()方法4個(gè)參數(shù)的使用

    關(guān)于pygame.surface.blit()方法4個(gè)參數(shù)的使用

    這篇文章主要介紹了關(guān)于pygame.surface.blit()方法4個(gè)參數(shù)的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • PyCharm無法識(shí)別PyQt5的2種解決方法,ModuleNotFoundError: No module named ''pyqt5''

    PyCharm無法識(shí)別PyQt5的2種解決方法,ModuleNotFoundError: No module named

    這篇文章主要介紹了PyCharm無法識(shí)別PyQt5的兩種解決辦法,ModuleNotFoundError: No module named 'pyqt5',需要的朋友可以參考下
    2020-02-02
  • python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框

    python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框

    這篇文章主要介紹了python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • python中pywebview框架使用方法記錄

    python中pywebview框架使用方法記錄

    Pywebview是一個(gè)用于構(gòu)建網(wǎng)頁的Python庫,類似于Flask框架,但主要使用Python編寫而非HTML或JS,通過簡單的命令即可安裝和使用,支持創(chuàng)建自制或調(diào)用外部網(wǎng)頁界面,需要的朋友可以參考下
    2024-09-09
  • Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼

    Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼

    Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • Python字符串格式化format()方法運(yùn)用實(shí)例

    Python字符串格式化format()方法運(yùn)用實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python字符串格式化format()方法運(yùn)用實(shí)例的相關(guān)資料,字符串格式化是Python編程中十分常用的部分,它可以幫助我們將更具可讀性的數(shù)據(jù)輸出到控制臺(tái)或?qū)懭胛募?需要的朋友可以參考下
    2023-08-08

最新評(píng)論