python之简易界面编程(模块搭建+界面搭建+功能完成)

目录

一,模块搭建

1,定义险种对象

2,重写构造

3,重写toString

4,文件写入

二,界面搭建

1,新建窗口

2,为窗口设置标题?

3,设置窗口大小?

4,编写窗口内容

5,显示窗口?

6,运行窗口?

三,功能完成

1,增加:追加

2,根据下标删除,移除元素,注意不是移除下标

注意:

manager包下recordManager文件,完整代码

?1,增加:

?2,删除

①获取被选中的行

②获取这行的数据(获取这行的字典对象,获取字典对象的值)

3,加载

①获取所有的元素

②清空元素

注意:END是一个常量

4,保存

main包下main文件,完整代码


一,模块搭建

1,定义险种对象

2,重写构造

3,重写toString

4,文件写入

pojo包下面的record文件,完整代码

import pickle

# 险种对象
class Record:
    record_id: str
    record_name: str
    record_money: float
    record_type: str

    # 重写构造
    def __init__(self, record_id: str, record_name: str, record_money: str, record_type: str):
        self.record_id = record_id
        self.record_name = record_name
        self.record_money = record_money
        self.record_type = record_type

    # 重写toString方法
    def __str__(self):
        return f'编号{self.record_id}名字{self.record_name}金额{self.record_money}缴费类型{self.record_type}'

if __name__=='__main__':
    r = Record('10001', '小宝', 3000, '医疗保险')
    print(r)
    # with open('record.txt','w',encoding='utf-8') as f:
    #报错 TypeError: write() argument must be str, not bytes
    # b  binary 二进制

    # with open('record.txt', 'wb') as f:#wb写入二进制
    #     pickle.dump(r,f)#把对象r放到文件f里


    with open('record.txt','rb') as f:
        print(pickle.load(f))

控制台运行结果

二,界面搭建

main包下的main文件

1,新建窗口

# 新建一个窗口
window=Tk()

2,为窗口设置标题

# 设置标题
window.title(‘险种管理’)

3,设置窗口大小

# 设置大小 widthxheightt+x+y
window.geometry(‘400x400+200+200’)

4,编写窗口内容

# 编写控件Treeview
table = Treeview(columns=(‘id’,‘name’,‘money’,‘type’),show=‘headings’)
table.column(‘id’,width=100)
table.column(‘name’,width=100)
table.column(‘money’,width=100)
table.column(‘type’,width=100)
table.heading(‘id’,text=‘记录编号’)
table.heading(‘name’,text=‘缴费者’)
table.heading(‘money’,text=‘缴费金额’)
table.heading(‘type’,text=‘缴费类型’)

5,显示窗口

# 让控件显示
table.pack()

6,运行窗口

# 让窗口运行
window.mainloop()

控制台运行效果

三,功能完成

1,增加:追加

2,根据下标删除,移除元素,注意不是移除下标

注意:

loads直接指定二进制的数据

load直接读取文件

manager包下recordManager文件,完整代码

import pickle

from pojo.record import Record


class RecordManager:
    records: list = []

    def __init__(self):
        # 初始化后开始加载文件中的数据
        with open('record.txt', 'rb') as f:
            data = f.read()
            if data == b'':
            # loads直接指定二进制的数据
                self.records = pickle.loads(f)
            # print('=======',f.read())
            # load直接读取文件
            # self.records=pickle.load(f)

    def add_record(self, record):
        assert isinstance(record, Record)
        self.records.append(record)

    # remove()    移除元素
    # pop()   移除下标
    def delete_record(self, record_id: str):
        for r in self.records:
            assert isinstance(r, Record)
            if r.record_id == record_id:
                self.records.remove(r)
                break
        else:
            print("没有这个人")

    def print_record(self):
        for r in self.records:
            print(r)

    def save_record(self):
        with open('record.txt', 'wb') as f:
            pickle.dump(self.records, f)


manager = RecordManager()
manager.add_record(Record('10002', '小??', 5000, '生育保险'))
manager.add_record(Record('10003', '小??', 3000, '失业保险'))
manager.print_record()
manager.save_record()

# Java中
# 序列化:将对象变成文件
# 反序列化:将文件变成对象

控制台运行结果

1,增加:

**from tkinter import simpledialog-----导包

simpledialog.askstring(‘title’,‘prompt’)----提示标题,提示**

2,删除

①获取被选中的行

②获取这行的数据(获取这行的字典对象,获取字典对象的值)

# 获取被选中的行
if len(table.selection())>0:
# 获取当前这行数据
# table.item(table.selection()[0])获得字典对象
# [“values”]获取字典的值
id=table.item(table.selection()[0])[“values”][0]

3,加载

①获取所有的元素

②清空元素

注意:END是一个常量

4,保存

main包下main文件,完整代码

# GUI界面编程

#  界面包
from tkinter import *
from tkinter import simpledialog
from tkinter.ttk import Treeview
from tkinter import messagebox as message
from manager.recordManager import RecordManager
from pojo.record import Record

manager=RecordManager()

# 新建一个窗口
window=Tk()
# 设置标题
window.title('险种管理')
# 设置大小  widthxheightt+x+y
window.geometry('400x400+200+200')


# 增加
def add():
    id=simpledialog.askstring('提示','输入编号')
    name=simpledialog.askstring('提示','输入名称')
    money=simpledialog.askstring('提示','输入金额')
    type=simpledialog.askstring('提示','输入类型')
    r=Record(id,name,money,type)
    manager.add_record(r)
    load()


# 删除
def delete():
    # message.showinfo('提示','删除成功')
    if message.askyesno('提示','是否删除'):
        # pass
        # 获取被选中的行
        if len(table.selection())>0:
            # 获取当前这行数据
            # table.item(table.selection()[0])获得字典对象
            # ["values"]获取字典的值
            id=table.item(table.selection()[0])["values"][0]
            manager.delete_record(str(id))
            table.delete(table.selection()[0])


#加载
def load():
    #1.获得所有元素
    for i in table.get_children():
        # 2.清空元素
        print(i)
        table.delete(i)
    for r in manager.records:
        assert isinstance(r,Record)
        table.insert('',END,value=(r.record_id,r.record_name,r.record_money,r.record_type))
# END是一个常量

def save():
    manager.save_record()


# 编写控件Treeview
table = Treeview(columns=('id','name','money','type'),show='headings')
table.column('id',width=100)
table.column('name',width=100)
table.column('money',width=100)
table.column('type',width=100)
table.heading('id',text='记录编号')
table.heading('name',text='缴费者')
table.heading('money',text='缴费金额')
table.heading('type',text='缴费类型')
# 让控件显示
table.pack()

# command指令。调用方法
Button(text='增加',command=add).pack()
Button(text='删除',command=delete).pack()
Button(text='加载',command=load).pack()
Button(text='保存',command=save).pack()

# 让窗口运行
window.mainloop()

运行效果

点击加载,数据显示

点击增加

选中一条数据点击删除

可以删除成功

搭建简易交互界面通常涉及到编写客户端和服务端的应用程序,这里以Python语言为例,解释一下如何创建一个基本的Windows客户端(使用Tkinter库)和Ubuntu服务器(使用socket编程)来进行简单协议的收发验证。 **Windows客户端(Tkinter)**: ```python import tkinter as tk import socket def send_data(text): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('localhost', 12345)) # 假设Ubuntu服务器监听本地的12345端口 s.sendall(text.encode()) print("Data sent to Ubuntu.") except Exception as e: print(f"Error: {e}") finally: s.close() button = tk.Button(text="Send", command=lambda: send_data(input("Enter data: "))) root = tk.Tk() button.pack() root.mainloop() ``` **Ubuntu服务器(Python socket)**: ```python import socket from Crypto import Random # 加密模块(示例仅用于展示验证) def handle_client(client_socket): random_generator = Random.new().read shared_key = b'some_secret_key' # 共享秘钥,实际项目应使用安全的随机生成 client_key = client_socket.recv(1024).strip() # 接收客户端发送的数据(这里假设是加密过的验证信息) if verify_keys(shared_key, client_key): # 验证函数 print("Validation successful.") # 进行进一步的交互或处理请求... else: print("Invalid key.") # ...其他部分忽略... server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 12345)) server_socket.listen(5) while True: client_socket, addr = server_socket.accept() handle_client(client_socket) ``` 在这个例子中,客户端点击按钮后会向服务器发送一条输入的消息。服务器接收消息后会对发送的信息进行验证(此处只做简化演示)。实际应用中需要考虑更安全的通信方式,比如加密。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值