Tkinter编写一个界面程序

380 小禅师 编程笔记

Tkinter编写一个界面程序


安全系统需要录入人员信息,恰好行业内的平台有数据,想了想还是直接爬过来比较省力。

打开pycharm,为了数据爬取更直观,我选择使用TK做成一个简单的桌面程序。

导入依赖:

import json
import tkinter as tk
import ttkbootstrap
from tkinter import ttk,messagebox
from ttkbootstrap import Style
import YLogin
import pandas as pd
from sqlalchemy import create_engine
from datetime import datetime


创建窗口:

# 创建窗口
root = tk.Tk()
root.title('人员信息推送助手')
root.geometry('800x600')

设置样式及创建组件:

# 设置样式
style = Style(theme='superhero')

# 创建登录表单
login_frame = ttk.Frame(root, padding=20)
login_frame.pack(side='top', fill='both', expand=True)

# 创建登录账号标签
username_label = ttk.Label(login_frame, text='登录账号:', style='superhero.Label')
username_label.grid(row=0, column=0, padx=10, pady=10)

# 创建登录账号输入框
username_entry = ttk.Entry(login_frame,style='superhero.TEntry')
username_entry.grid(row=0, column=1, padx=10, pady=10)

# 创建密码标签
password_label = ttk.Label(login_frame, text='密码:', style='superhero.Label')
password_label.grid(row=0, column=2, padx=10, pady=10)

# 创建密码输入框
password_entry = ttk.Entry(login_frame, show='*', style='superhero.TEntry')
password_entry.grid(row=0, column=3, padx=10, pady=10)
# 创建表格组件
table_frame = ttk.Frame(root, padding=20)
table_frame.pack(side='top', fill='both', expand=True)

table = ttk.Treeview(table_frame, columns=('id','name', 'age', 'gender'), show='headings')
table.heading('id', text='序号',anchor='center')
table.heading('name', text='姓名',anchor='center')
table.heading('age', text='身份证号码',anchor='center')
table.heading('gender', text='地址',anchor='center')
table.column('id', width=20,anchor='center')
table.column('name', width=50,anchor='center')
table.column('age', width=200,anchor='center')
table.column('gender', width=300,anchor='center')
table.pack(side='top', fill='both', expand=True)

# 创建文本框
text_frame = ttk.Frame(root, padding=20)
text_frame.pack(side='top', fill='both', expand=True)

text = tk.Text(text_frame, height=10, width=100)
text.pack(side='top', fill='both', expand=True)

# 运行窗口
root.mainloop()


运行看下界面:


Tkinter编写一个界面程序


基本满足需求,继续完成其他功能代码:

import requests
import json
import pandas as pd
from pandas import ExcelWriter
from openpyxl.workbook import Workbook



session = requests.session()

def get_cookies(username,pwd):#获取登录后的token

   url = "https://目标URL/apis/user/api/user/login/password/comp"
   payload = json.dumps({
      "clientType": 1,
      "mobile": username,
      "password": pwd,
      "city": "上海市",
      "province": "上海市",
      "loginIp": "116.234.108.158",
      "os": "Windows:Windows 10",
      "browser": "Chrome:110"
   })
   headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69',
      'Content-Type': 'application/json',
      'Accept': '*/*',
      'Host': '',
      'Connection': 'keep-alive'
   }
   response = requests.request("POST", url, headers=headers, data=payload)
   datacs = response.json()
   datacs = datacs['data']['token']
   tokens = datacs

   print(datacs)
   return datacs

def get_user_dict(token,usertype):#使用token访问获取人员信息字典。请求时需带上token。
   url = "https://目标URL/apis/user/pc/comp/user/list"
   payload = json.dumps({
      "pageCurrent": 1,
      "pageSize": 999,
      "userType": usertype,
      "userName": "",
      "idCard": "",
      "phone": ""
   })
   headers = {
      'token': token,
      'Cookie': 'Cookie=username=; password=; RC_WEB_TOKEN='+token,
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69',
      'Content-Type': 'application/json',
      'Accept': '*/*',
      'Host': '',
      'Connection': 'keep-alive'
   }

   response = requests.request("POST", url, headers=headers, data=payload)

   return response.json()

def get_user_id(userdata): #参数USERDATA为getuserid()获取的数据处理后得到的dict。
   userid = userdata['data']['list']
   ids = []
   number = len(userid)

   for i in userid:
    # print(i.get('id'))

      ids.append(i.get('id'))
   return ids  #返回一个idlist
def get_user_info(token,id):
   url = "https://目标URL/apis/user/pc/comp/user/viewById?id="+id

   payload = {}
   files = {}
   headers = {
      'token': token,
      'Cookie': 'Cookie=username=; password=; RC_WEB_TOKEN='+token,
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69',
      'Accept': '*/*',
      'Host': 'ylonlinedu.com',
      'Connection': 'keep-alive'
   }

   response = requests.request("GET", url, headers=headers, data=payload, files=files)

   return response.json()

def writ_excel(usertype,xlsxname,username,pwd):#根据人员类型字段 写出excel文件。
   tokens = get_cookies(username,pwd)

   user_info = get_user_dict(tokens,usertype = usertype)
   user_data = json.loads(json.dumps(user_info))
   user_ids = get_user_id(user_data)
   total = len(user_ids)

   user_info_list = []
   for infos in user_ids:
      ids = get_user_info(tokens,id=infos)
      ids = ids['data']
      user_info_list.append(ids)

   writer = ExcelWriter(xlsxname)
   df = pd.DataFrame(user_info_list)
   df.to_excel(writer, index=False)
   writer.save()
#
   return user_info_list

因为目标平台抓取的人员数据与我自己系统的字段不一致,所以写到excel文件内,手动删除不要的字段,直接导入数据库即可。

当然,也可以在程序内修改并直接推送。

声明
本人日常收集记录、分享的内容,只供参考之用。
如对文章中提到您的产品感到不满,请与我联系。
联系Q Q 1318686166   Email: alex@dogll.com
THE END
相关文章
评论列表
  • Migrate
    Migrate May 12日, 2023 @ 10:38 am 不是经常有人说“基础不牢,地动山摇吗”?作为转行的人,不知道到底该不该死磕底层比如操作系统这些知识 回复
  • 小火柴
    小火柴 May 15日, 2023 @ 01:00 pm 已经看过《趣学Python——教孩子学编程》Python for Kids, Jason R Briggs ,后续想要深入学习Python推荐什么书呀?深入到使用TensorFlow框架 回复
  • 老头爱学习
    老头爱学习 Jun 21日, 2023 @ 02:39 am 有一个问题,《父与子编程之旅》那本书,第11章嵌套循环中,练习题中【动手试一试】第2题: 【Countdown timer: How many seconds? 4 4 * * * * 3 * * * 2 * * 1 * BLAST OFF!】 答案中: import time seconds = int(input("Countdown timer: How many seconds? ")) for i in range (seconds, 0, -1): print(i,end=" ") for seconds in range(i): print("*",end=" ") print() time.sleep(1) print("BLAST OFF!") 我的问题是:内循环:for seconds in range(i)这句不能明白,我尝试更换变量 写成:for j in range(seconds)但输出后打印不正确。我不能明白为什么。内循环和外循环,必须有相同变量吗?书里的其他例题我都明白,也并没有限制过变量。请问您能否帮忙讲解? 回复
  • 咕咕
    咕咕 May 19日, 2023 @ 06:32 pm 刚才尝试了下发现,涉及到有0,比如:range(0)和[0],输出print(“*”)结果完全不一样。又去终端里python2.7看了下, >>> range(0) [] >>> [0] [0] 突然明白了。。。。 range(起始,截止,步长),如果我不标准的只写起始数:比如0或负数,就会返回空值[]None,对吗? 好有趣~~~~~ 回复
发布评论
验证码
提交