python: Eclipse 2024‑03 R+pydev

https://www.eclipse.org/downloads/packages/release/2024-03/r

參考配置環境: 

PyDev - Python IDE for Eclipse | Eclipse Plugins, Bundles and Products - Eclipse Marketplace | Eclipse Foundation

https://marketplace.eclipse.org/content/pydev-python-ide-eclipse

 

 

 

 

 

 

 

 

# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : Eclipse 2022.12 python 3.11
# OS        : windows 10
# Datetime  : 2024/12/4 21:31
# User      : geovindu
# Product   : Eclipse
# Project   : ictsimple
# File      : treeviewschool.py
# explain   : 学习
import os
import sys
import io
from operator import iconcat
from tkinter import *
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from ttkbootstrap.tableview import Tableview
from tkinter import messagebox as msg


class Mainschool(ttk.Window):
    """

    """
    def __init__(self):
        """

        """
        super().__init__(themename="cosmo", title="school manage")
        # self.Window(themename="cosmo") #superhero
        self.maxsize = 300
        # self.geometry('{}x{}'.format(1350, 900))
        self.first_var = ttk.Variable()
        self.title = "school manage"
        #self.themename = 'superhero'
        self.iconbitmap('favicon.ico')
        #self.app = ttk.Window()
        #self.app.iconbitmap("favicon.ico")
        # 'studentID', 'firstname', 'lastname', 'schoolname', 'teltype', 'telno'
        # app.tk.call('wm', 'iconphoto', app._w, PhotoImage(file='image/1.png'))
        self.vid = StringVar()
        self.vfname = StringVar()
        self.vlname = StringVar()
        self.vschoolname = StringVar()
        self.vteltype = StringVar()
        self.vtelno = StringVar()

        frame1 = ttk.Frame(self)
        frame1.pack()

        ttk.Label(frame1, text='id:').grid(column=0, row=0, padx=5, pady=5, sticky=E)
        self.entid = ttk.Entry(frame1, textvariable=self.vid)
        self.entid.grid(column=1, row=0, padx=5, pady=5, sticky=W)
        # ent_id.pack(side=LEFT)
        ttk.Label(frame1, text='First Name:').grid(column=2, row=0, padx=5, pady=5, sticky=E)
        self.entfname = ttk.Entry(frame1, textvariable=self.vfname)
        # ent_fname.pack(side=LEFT)
        self.entfname.grid(column=3, row=0, padx=5, pady=5, sticky=W)

        ttk.Label(frame1, text='Last Name:').grid(column=4, row=0, padx=5, pady=5, sticky=E)
        self.entlname = ttk.Entry(frame1, textvariable=self.vlname)
        # ent_lname.pack(side=LEFT)
        self.entlname.grid(column=5, row=0, padx=5, pady=5, sticky=W)

        ttk.Label(frame1, text='school Name:').grid(column=6, row=0, padx=5, pady=5, sticky=E)
        self.entschoolname = ttk.Entry(frame1, textvariable=self.vschoolname)
        # ent_schoolname.pack(side=LEFT)
        self.entschoolname.grid(column=7, row=0, padx=5, pady=5, sticky=W)

        ttk.Label(frame1, text='typetel:').grid(column=8, row=0, padx=5, pady=5, sticky=E)
        self.entteltype = ttk.Entry(frame1, textvariable=self.vteltype)
        # ent_teltype.pack(side=LEFT)
        self.entteltype.grid(column=9, row=0, padx=5, pady=5, sticky=W)

        ttk.Label(frame1, text='tel:').grid(column=10, row=0, padx=5, pady=5, sticky=E)
        self.enttelno = ttk.Entry(frame1, textvariable=self.vtelno)
        # ent_telno.pack(side=LEFT)
        self.enttelno.grid(column=11, row=0, padx=5, pady=5, sticky=W)

        self.btnedit = ttk.Button(frame1, text='Edit Row', command=self.updateRow)
        # btn_edit.pack(side=LEFT)
        self.btnedit.configure(state=DISABLED)  # 不可用
        self.btnedit.grid(column=12, row=0, padx=5, pady=5, sticky=W)
        # 'studentID', 'firstname', 'lastname', 'schoolname', 'teltype', 'telno'
        columns = [
            {'text': 'studentID', 'stretch': True},
            {'text': 'First Name', 'stretch': True},
            {'text': 'Last Name', 'stretch': True},
            {'text': 'schoolname', 'stretch': True},
            {'text': 'teltype', 'stretch': True},
            {'text': 'telno', 'stretch': True},
            {'text': 'edit', 'stretch': False, 'anchor': CENTER},
            {'text': 'delete', 'stretch': False, 'anchor': CENTER}
        ]
        self.loadRecord()
        data = []
        # '📄🖉', '❌'
        for dt in record:
            row = dt
            row.append('📄🖉')
            row.append('❌')
            data.append(row)

        colors = self.style.colors
        self.dt = Tableview(self,
                       coldata=columns,
                       rowdata=data,
                       paginated=True,
                       pagesize=15,
                       searchable=True,
                       bootstyle=PRIMARY,
                       stripecolor=(colors.light, None),

                       )
        self.dt.pack()
        self.dt.view.bind('<ButtonRelease-1>', self.onSelectItem)
        self.btnadd = ttk.Button(self, text='Add Row', command=self.addRow)
        self.btnadd.pack()

    def loadRecord(self):
        """
        加载学生文本文件的所有学生信息
        :return:
        """
        global record
        file = "student.txt"
        if os.path.exists(file):  # 文件是否存在,存在读取文件
            f = open(file, mode="r", encoding='utf-8')  # 读取学生文本文件的所有学生信息
            record = f.readlines()

            for i in range(0, len(record)):
                record[i] = record[i].replace("\n", "")  # 把换行符号,替换成空字符
                record[i] = record[i].split(";")  # 把分号的的行数据进行分割
            f.close()

    def searchRecordByFirstname(self,firstname: str) -> int:
        """
        查找名字所在列的索引值 index
        :param firstname: 名字
        :return: 返回索引值
        """
        for i in range(0, len(record)):
            if record[i][1] == firstname:  # 等于这个名字的一行记录打印
                for j in range(0, len(record[i])):
                    print(record[i][j], end='    ')
                return i
        return -1

    def searchRecordByStudent(self,studentno: str) -> int:
        """
        查找学生所在列的索引值 index
        :param studentno: 学生编号
        :return: 返回索引值
        """
        if record is not None:
            if len(record) > 0:
                for i in range(0, len(record)):
                    if record[i][0] == studentno:  # 找到输入参数学号的记录的索引值
                        return i
        return -1

    def updateRecord(self,sudentno: str, firstname: str, lastname: str, schoool: str, noType: str, number: str) -> bool:
        """
        更新记录,并更新至文本文件中
        :param sudentno: 学生编号
        :param firstname: 名
        :param lastname: 姓
        :param schoool: 学校名称
        :param noType: 电话类型
        :param number: 电话
        :return:
        """
        ok = False
        print('no:',sudentno)
        row = self.searchRecordByStudent(sudentno)
        data = [sudentno, firstname, lastname, schoool, noType, number]  # 把要列新的信息,放在1D list中。便于更新2D list一行记录
        if row != -1:
            record[row] = data  # 当前索引值的记录的赋值
            self.updateFile()  # update file data 修改之后更新文件记录行
            print("Record Update!")
            ok = True
            return ok
        else:
            print("Record not Update!")
            return ok

    def deleteRecordByFirstname(self,firstname: str):
        """
        删除查找名字所在行的值
        :param firstname:
        :return:
        """
        ok = False
        row = self.searchRecordByFirstname(firstname)
        if row != -1:
            for j in range(0, len(record)):
                # global record
                record[row][j] = "---"  # 不是真正删除,只是把这一行赋值为--- 对于当前行中的每列的记录更新
                # update_file()  # update file data 删除之后更新文件记录行
            print("Record deleted!")
            ok = True
            return ok
        else:
            print("Record not found!")
            return ok

    def addRecord(self,sudentno: str, firstname: str, lastname: str, schoool: str, noType: str, number: str) -> bool:
        """
        添加一行学生信息
        :param sudentno: 学生编号
        :param firstname: 名
        :param lastname: 姓
        :param schoool: 学校名称
        :param noType: 电话类型
        :param number: 电话
        :return:
        """
        file = "student.txt"
        ok = False
        try:
            if os.path.exists(file):
                f = open(file, mode="a", encoding='utf-8')
                f.write(
                    "\n" + sudentno + ";" + firstname + ";" + lastname + ";" + schoool + ";" + noType + ";" + number)  # 添加一行到文本文件中
                f.close()
                print('insert ok')
                ok = True
            return ok
        except Exception as erro:
            print('insert no')
            return ok
            pass

    def updateFile(self):
        """
        更新学生信息到文本文件中
        :return:
        """
        f = open("student.txt", mode="w", encoding='utf-8')  # 更新所有学生信息,保存至文本文件中
        for i in range(0, len(record)):
            f.write(
                record[i][0] + ";" + record[i][1] + ";" + record[i][2] + ";" + record[i][3] + ";" + record[i][4] + ";" +
                record[i][5])  # 对每一行记录,进行写录,所以在这里用循环
            if i < len(record) - 1:
                f.write("\n")
        f.close()





    def addRow(self):
        """

        :return:
        """
        id = self.entid.get()
        fname = self.entfname.get()
        lname = self.entlname.get()
        schoolname = self.entschoolname.get()
        teltyp = self.entteltype.get()
        elno = self.enttelno.get()

        print(fname)
        if fname != '' and lname != '':
            if msg.askyesno('info', f'Confirm add?', parent=self):
                self.dt.insert_row(END, [id, fname, lname, schoolname, teltyp, elno, '📄🖉', '❌'])
                self.dt.load_table_data()
                rows_obj = self.dt.get_rows()
                matriz = [row.values for row in rows_obj]
                print('var matriz --> Before edit - table itens:', matriz)
                # 数据也添加
                self.addRecord(id, fname, lname, schoolname, teltyp, elno)
                # 清空输入框的数据
                self.entid.delete(0, '')
                self.entfname.delete(0, '')
                self.entlname.delete(0, '')
                self.entschoolname.delete(0, '')
                self.entteltype.delete(0, '')
                self.enttelno.delete(0, '')
        else:
            print('no')
            msg.showinfo("info", "no empty", icon='error')  # icon='info'  question warning
        return

    def updateRow(self):
        """
        ID 不可以修改
        :return:
        """

        self.btnedit.configure(state=DISABLED)
        self.btnadd.configure(state=NORMAL)
        self.dt.view.configure(selectmode=EXTENDED)
        self.dt.configure(bootstyle='primary-table')

        if msg.askyesno('info', f'Confirm Edit?', parent=self):
            rows = [[self.vid.get(), self.vfname.get(), self.vlname.get(), self.vschoolname.get(), self.vteltype.get(), self.vtelno.get(), '📄🖉', '❌']]
            if rows != []:
                selected = self.dt.view.focus()
                for item in rows:
                    self.dt.view.item(selected, values=item)
                self.dt.load_table_data()
                rows_obj = self.dt.get_rows()
                matriz = [row.values for row in rows_obj]
                ''''''
                print('var matriz --> After editing - table itens:', matriz)

                # 数据也修改
                self.loadRecord()
                self.updateRecord(self.vid.get(), self.vfname.get(), self.vlname.get(), self.vschoolname.get(), self.vteltype.get(), self.vtelno.get())

                # 清空输入框的数据
                self.entid.configure(state=NORMAL)
                self.entid.delete(0, '')
                self.entfname.delete(0, '')
                self.entlname.delete(0, '')
                self.entschoolname.delete(0, '')
                self.entteltype.delete(0, '')
                self.enttelno.delete(0, '')

        return

    def onSelectItem(self,event=None):
        """

        :param event:
        :return:
        """
        table_mode = str(self.dt.view.cget('selectmode'))
        if table_mode == 'extended':

            curItem = self.dt.view.item(self.dt.view.focus())
            col = self.dt.view.identify_column(event.x)

            region = self.dt.view.identify_region(event.x, event.y)
            if region == 'cell':
                if col == '#7':  # 'cell' edit 放在最后两行,或是最前两行
                    self.entid.configure(state=DISABLED)
                    self.vid.set(curItem['values'][0])
                    self.vfname.set(curItem['values'][1])
                    self.vlname.set(curItem['values'][2])
                    self.vschoolname.set(curItem['values'][3])
                    self.vteltype.set(curItem['values'][4])
                    self.vtelno.set(curItem['values'][5])

                    self.btnedit.configure(state=NORMAL)
                    self.btnadd.configure(state=DISABLED)
                    self.dt.view.configure(selectmode='none')
                    self.dt.configure(bootstyle='secondary-table')

                if col == '#8':  # 'cell' delete
                    iids = self.dt.view.selection()
                    if len(iids) > 0:
                        if msg.askyesno('Warning', f'Confirm Deletion?', parent=self, icon='error'):
                            prev_item = self.dt.view.prev(iids[0])
                            self.dt.delete_rows(iids=iids)
                            self.dt.view.focus(prev_item)
                            self.dt.view.selection_set(prev_item)
            return



main=Mainschool()
main.mainloop()

  

posted @ 2024-12-04 20:24  ®Geovin Du Dream Park™  阅读(30)  评论(0)    收藏  举报