python tkinter编写界面,使用win32com操作excel获取数据生成截图后,wxpy登录微信,给租客发送房租(三)

使用Python的tkinter创建界面,通过win32com模块读取Excel数据,生成房租信息表格图片。接着,利用wxpy库登录微信,根据用户选择的租客和昵称类型发送房租提醒消息。完成发送后,程序将更新界面展示发送结果。
摘要由CSDN通过智能技术生成

tkinter界面:

这部分很大坨,不过跟上部分一样,代码里备注得很完整了,慢慢消化就能看得懂了!!

 

操作步骤:

运行程序后,
1.先点击“获取房租信息”按钮,所有租客该月的房租信息会显示在treeview上(如果该租客此月房租还没记录好,那么其对应的按钮不可选),并依据其房租信息生成表格图片。
2.点击“登录微信”,弹出二维码,扫描登录后,按钮变为“发送房租”,此时可以选择要发送的租客,并且设定好微信昵称类型(房间名就是“楼房-房号”),再点击发送即可
3.发送完毕后,每个租客的发送结果会显示在tree上

 

每部分的详解:

'''tk窗口
   1.年月时间选择窗口
        要点:根据当前时间自动选择好
             选择月份,会在text窗口提示
             
   2.text显示操作窗口
        要点:不同操作,字体不同————初始、常规、警告、报错
                     1.选择时间                              常规
                     2.选择微信昵称                           常规
                     3.获取xx月所有房租                       常规 
                     4.报错:获取xx月房租失败,再按一次        报错 
                     5.登录微信《》成功                       常规 
                     6.报错:微信登录失败                     报错  
                     7.点击发送:① 所有住户都没有房租信息         警告
                                ②此次发送的是房租/特定内容       常规             
                                ③报错:此时已掉线,请重新登录    报错                                
                                ④没有选中租户,请选择            警告
                                ⑤成功,发送了N个租户             常规
              插入后,text窗口不可编辑,而且一直显示的是最新内容
              
     发送窗口
        构成:1.租客在微信上的昵称 单选按钮(注:房间名为 “房屋-房号” 组成)  
              2.发送特定内容(输入框/登录-发送按钮)
   
   3.主要操作的按钮
        构成:获取房租信息:
                  步骤:清空tree
                        调用Open_Excel,获取住户租金详情,生成截图
                        将租金详情在tree上显示出来,将按钮、截图等关系放在self.orm (具体见insert_tv())
              登录微信/发送房租:
                  ————登录:使用wxpy登录微信,成功后改变按钮状态
                  ————发送:
                          1.判断是否获取了住户详情
                          2.判断所选月份下,获取的住户能否被选中
                          3.判断此时微信是否在线:
                          4.循环self.orm(存放每个住户信息的dict)
                                发送条件:---此住户被选中(多选按钮打勾)
                                         ---微信有此住户
                          5.text插入发送情况
    
   4.tree显示窗口:
        构成:——tree头,因为tree原始的头会随滚动条动,所以用按钮重设了一个头
             —— 主体: 滚动条
                       画布canvas:tree
                                   多选按钮frame
        要点:鼠标滚轮滚动时,改变的页面是canvas整个画面(包括多选按钮) 而不是单独treeview
              设定tree的样式:---每行高度
                             ---颜色:常规、被选中时、不可选时
    
   5.insert_tv 插入tree时 设定每个item跟多选按钮 的联系
        插入:
               循环send_info_dict:---如果value是数字(0),那么此租户没结算房租
                                  ---结算了房租:tree插入该租户
                                                将该有效的租户信息放入self.orm
                                  ---创建多选按钮,与tree该行(item)绑定
        要点:
               根据tree重设定窗口tv_frame的高度
               多选按钮与item绑定:勾选按钮/点击item,2者都会发生改变,
               每次选择后,全选按钮也会发生改变
               没有结算房租的,其状态为不可选
               
'''

 

class My_Tk():
    def __init__(self):
        self.tk=Tk()
        self.tk.geometry('665x600')
        self.tk.resizable(width=False, height=True)  # 宽不可变, 高可变,默认为True

        self.create_yearframe()     #创建年份 构件
        self.create_monthframe()    #创建月份构件
        self.create_stateframe()    #创建text构件,包含发送特殊内容按钮
        self.create_buttonframe()   #创建 获取房租信息、登录微信 按钮
        self.orm = {}               #获取房租信息后,存放tree每一行、多选按钮、与租客的对应dict {item:按钮、住户房号、租客名、image}

        self.create_heading()       #tree重设的头
        self.create_tv()            #创建tree与多选按钮 构件
        mainloop()


# =============================最开始选择年月部分========================###
    def create_yearframe(self):
        '''创建年份的构件,放入单选按钮'''
        import tkinter
        yearframe=tkinter.LabelFrame(self.tk,height=50, width=400, text='年份',)
        yearframe.pack(fill=X)

        self.year = StringVar()
        year=datetime.datetime.now().strftime('%Y')
        self.year.set(year)

        Style().configure('TRadiobutton', font='宋体', )
        for i in range(2019,2023):
            month=Radiobutton(yearframe,variable=self.year, text='%s年'%i, value='%s'%i)
            month.grid(column=i, row=1, sticky=W, padx=10)

    def create_monthframe(self):
        '''创建月份的构件,放入单选按钮,只有选择月份时,才有调用回调函数,显示所选时间'''
        import tkinter
        monthframe=tkinter.LabelFrame(self.tk,height=50, width=400, text='月份')
        monthframe.pack(fill=X)

        self.month = StringVar()
        month=datetime.datetime.now().strftime('%m')
        self.month.set('%s月'%int(month))
        def select_month():
            self.the_month = '%s-%s' % (self.year.get(), self.month.get())  # 获取tk上选择的时间
            self.text_insert("选择时间为: %s" % self.the_month)

        for i in range(1,7):
            month=Radiobutton(monthframe,variable=self.month, text='%s月'%i, value='%s月'%i,command=select_month)
            month.grid(column=i, row=1, sticky=W, padx=20)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个能够上传多个Excel文件的Python Tkinter程序: ```python import tkinter as tk from tkinter import filedialog import pandas as pd class ExcelUploader: def __init__(self, root): self.root = root self.files = [] # 创建一个上传按钮 upload_button = tk.Button(self.root, text="上传文件", command=self.open_file_dialog) upload_button.pack() # 创建一个显示已上传文件的列表框 self.file_listbox = tk.Listbox(self.root) self.file_listbox.pack() # 创建一个开始处理按钮 process_button = tk.Button(self.root, text="开始处理", command=self.process_files) process_button.pack() def open_file_dialog(self): # 打开文件对话框并选择多个文件 files = filedialog.askopenfilenames(title="选择要上传的文件", filetypes=[("Excel文件", "*.xlsx")]) # 将选择的文件添加到文件列表中 for file in files: self.files.append(file) self.file_listbox.insert(tk.END, file) def process_files(self): # 读取每个上传的Excel文件并打印出每个文件的第一行数据 for file in self.files: df = pd.read_excel(file) print(df.iloc[0]) if __name__ == "__main__": root = tk.Tk() root.title("Excel文件上传程序") uploader = ExcelUploader(root) root.mainloop() ``` 这个程序使用Tkinter来创建一个GUI界面,其中包含一个上传按钮、一个显示已上传文件的列表框和一个开始处理按钮。 当用户点击上传按钮时,程序会打开一个文件对话框并允许用户选择多个Excel文件。选择的文件将被添加到文件列表中。 当用户点击开始处理按钮时,程序将读取每个上传的Excel文件并打印出每个文件的第一行数据。你可以根据自己的需要修改这个程序,让它执行你想要的操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值