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)