当前位置:   article > 正文

智能联系人管理Python代码_python手机通讯录代码函数

python手机通讯录代码函数

PyCharm中运行《智能联系人管理》即可进入如图1所示的系统主界面。

图1  系统主界面

 具体的操作步骤如下:

(1)添加联系人。在主界面中,单击“添加”按钮,将打开添加联系人窗口,在该窗口中,单击“选择名片”按钮,选择一张名片对应的图片,系统将自动识别该名片中的信息,并且显示到右侧的文本框中。

(2)搜索联系人。在主界面顶部的文本框中,输入要搜索的内容,单击“搜索”按钮,将从已经保存的联系人信息中查找相应的内容,如果找到对应的内容,将显示在下方  

(3)编辑或删除联系人。在显示联系人时,每个联系人的右侧都有两个按钮,一个是“编辑”,另一个是“删除”,单击不同的按钮将实现相应的功能。

  1. # qt5模块
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtGui import *
  5. from PyQt5.QtWebEngineWidgets import *
  6. from PyQt5.QtCore import *
  7. # 自定义模块
  8. import mainpage
  9. import addpage
  10. import gridlayout
  11. import editpage
  12. import pinyintool
  13. # 内置模块
  14. import sys
  15. import requests, base64, json
  16. import collections
  17. import os
  18. import re
  19. # 第三方模块
  20. import pandas as pd
  21. from pandas import DataFrame
  22. from PIL import Image
  23. import phone
  24. from pyecharts.charts import Pie
  25. # 获取文件的路径
  26. cdir = os.getcwd()
  27. # 文件路径
  28. path=cdir+'/res/datafile/'
  29. # 读取路径 判断是否创建了文件
  30. if not os.path.exists(path):
  31. # 根据路径建立文件夹
  32. os.makedirs(path)
  33. # 姓名 公司 电话 手机 邮件 地址 城市 分类 name comp tel mobile email addr city type
  34. cardfile = pd.DataFrame(columns=['name', 'comp', 'tel', 'mobile', 'email', 'addr', 'city', 'type'])
  35. # 生成xlsx文件
  36. cardfile.to_excel(path+'名片信息表.xlsx', sheet_name='data', index=None)
  37. # 编辑页面
  38. class editWindow(QWidget,editpage.Ui_Form):
  39. # 初始化方法
  40. def __init__(self):
  41. # 找到父类 首页面
  42. super(editWindow, self).__init__()
  43. # 初始化页面方法
  44. self.setupUi(self)
  45. # 为保存按钮添加事件
  46. self.pushButton_2.clicked.connect(self.editkeep)
  47. # 显示添加名片页面
  48. def OPEN(self):
  49. # 显示页面
  50. self.show()
  51. # 保存编辑内容
  52. def editkeep(self):
  53. # 获取按钮名称
  54. indexName = self.pushButton_2.objectName()
  55. # 获取表
  56. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  57. # 获取控件信息 # 'name', 'comp', 'tel', 'mobile', 'email', 'addr', 'city', 'type'
  58. name = self.lineEdit.text()
  59. comp = self.lineEdit_2.text()
  60. tel = self.lineEdit_3.text()
  61. mobile = self.lineEdit_4.text()
  62. email = self.lineEdit_5.text()
  63. addr = self.lineEdit_6.text()
  64. # 判断手机号是否为空
  65. if mobile.strip():
  66. # 根据手机号判断区域
  67. try:
  68. info = phone.Phone().find(int(mobile))
  69. except Exception as e:
  70. print("根据手机号判断区域时出错", e)
  71. QMessageBox.critical(self, "错误:", "手机号码不正确!", QMessageBox.Ok) # 弹出提示对话框
  72. self.lineEdit_4.setFocus() # 让手机文本框获得焦点
  73. return
  74. # 判断手机号是否正确返回信息
  75. if info == None:
  76. city = '其他'
  77. else:
  78. # 正确返回信息获取省
  79. city = info['province']
  80. else:
  81. city = '其他'
  82. # 判断姓名是否为空
  83. if name.strip():
  84. # 获取首字母拼音
  85. type = pinyintool.getPinyin(name[0])
  86. # 根据行号删除数据
  87. datas = pi_table.drop(index=[int(indexName)], axis=0)
  88. data = datas.append({'name': name,
  89. 'comp': comp,
  90. 'tel': tel,
  91. 'mobile': mobile,
  92. 'email': email,
  93. 'addr': addr,
  94. 'city': city,
  95. 'type': type
  96. }, ignore_index=True)
  97. # 更新xlsx文件
  98. DataFrame(data).to_excel(path + '名片信息表.xlsx',
  99. sheet_name='data', index=False)
  100. self.close()
  101. window.dataall()
  102. else:
  103. QMessageBox.information(self, '提示信息', '姓名不能为空')
  104. pass
  105. #首页列表样式
  106. class griditem(QWidget,gridlayout.Ui_Form):
  107. # 初始化方法
  108. def __init__(self):
  109. # 找到父类 首页面
  110. super(griditem, self).__init__()
  111. # 初始化页面方法
  112. self.setupUi(self)
  113. # 显示饼图类
  114. class HtmlWindows(QMainWindow):
  115. def __init__(self):
  116. super(QMainWindow,self).__init__()
  117. self.setGeometry(200, 200, 850, 500)
  118. self.browser = QWebEngineView()
  119. def set(self,title,hurl):
  120. self.setWindowTitle(title)
  121. d = os.path.dirname(os.path.realpath(sys.argv[0])) # 获取当前文件所在路径
  122. d=re.sub(r'\\','/',d) # 将路径中的分隔符\替换为/
  123. url=d+'/res/datafile/'+hurl
  124. self.browser.load(QUrl(url))
  125. self.setCentralWidget(self.browser)
  126. # 首页页面
  127. class parentWindow(QWidget,mainpage.Ui_Form):
  128. # 初始化方法
  129. def __init__(self):
  130. # 找到父类 首页面
  131. super(parentWindow, self).__init__()
  132. # 初始化页面方法
  133. self.setupUi(self)
  134. # 标签按钮绑定事件
  135. self.pushButton_3.clicked.connect(self.dataall)
  136. self.pushButton_4.clicked.connect(lambda:self.dataother('A'))
  137. self.pushButton_6.clicked.connect(lambda:self.dataother('B'))
  138. self.pushButton_5.clicked.connect(lambda:self.dataother('C'))
  139. self.pushButton_7.clicked.connect(lambda:self.dataother('D'))
  140. self.pushButton_8.clicked.connect(lambda:self.dataother('E'))
  141. self.pushButton_9.clicked.connect(lambda:self.dataother('F'))
  142. self.pushButton_10.clicked.connect(lambda:self.dataother('G'))
  143. self.pushButton_11.clicked.connect(lambda:self.dataother('H'))
  144. self.pushButton_12.clicked.connect(lambda:self.dataother('I'))
  145. self.pushButton_13.clicked.connect(lambda:self.dataother('J'))
  146. self.pushButton_14.clicked.connect(lambda:self.dataother('K'))
  147. self.pushButton_15.clicked.connect(lambda:self.dataother('L'))
  148. self.pushButton_16.clicked.connect(lambda:self.dataother('M'))
  149. self.pushButton_17.clicked.connect(lambda:self.dataother('N'))
  150. self.pushButton_18.clicked.connect(lambda:self.dataother('O'))
  151. self.pushButton_19.clicked.connect(lambda:self.dataother('P'))
  152. self.pushButton_20.clicked.connect(lambda:self.dataother('Q'))
  153. self.pushButton_21.clicked.connect(lambda:self.dataother('R'))
  154. self.pushButton_22.clicked.connect(lambda:self.dataother('S'))
  155. self.pushButton_23.clicked.connect(lambda:self.dataother('T'))
  156. self.pushButton_24.clicked.connect(lambda:self.dataother('U'))
  157. self.pushButton_25.clicked.connect(lambda:self.dataother('V'))
  158. self.pushButton_26.clicked.connect(lambda:self.dataother('W'))
  159. self.pushButton_27.clicked.connect(lambda:self.dataother('X'))
  160. self.pushButton_28.clicked.connect(lambda:self.dataother('Y'))
  161. self.pushButton_29.clicked.connect(lambda:self.dataother('Z'))
  162. # 搜索按钮绑定事件
  163. self.pushButton.clicked.connect(self.seachbtn)
  164. self.pushButton_30.clicked.connect(self.lookpie)
  165. # 显示全部数据
  166. self.dataall()
  167. # 显示饼图
  168. def lookpie(self):
  169. # 获取表数据
  170. # 读取文件内容
  171. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  172. # 获取城市信息
  173. citattr = pi_table['city'].values
  174. # 判断是否有城市信息
  175. if len(citattr)==0:
  176. # 没有信息提示
  177. QMessageBox.information(self, '提示信息', '没有联系人')
  178. return
  179. attr = []
  180. v1 = []
  181. # 循环表里city项
  182. for i in citattr:
  183. # 判断city项是否包含在attr里
  184. if not i in attr:
  185. # 不包含在attr表里时候添加到attr里
  186. attr.append(i)
  187. # Counter(计数器)是对字典的补充,用于追踪值的出现次数。
  188. d = collections.Counter(citattr)
  189. # 循环城市列表
  190. for k in attr:
  191. # d[k] 是k在列表d中出现的次数
  192. v1.append(d[k])
  193. # 生成饼图
  194. pie = Pie("联系人分布")
  195. pie.add("", attr, v1, is_label_show=True)
  196. pie.show_config()
  197. pie.render(path+'联系人分布饼图.html')
  198. # 显示饼图
  199. htmlwidows.set('联系人分布','联系人分布饼图.html')
  200. htmlwidows.show()
  201. pass
  202. #搜索功能
  203. def seachbtn(self):
  204. # 读取文件内容
  205. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  206. seachk=self.lineEdit.text()
  207. # 查询数据 用户名和公司如果有一个包含搜索内容筛选出来
  208. cardArray = pi_table[(pi_table['name'].str.contains(seachk)) | (pi_table['comp'].str.contains(seachk))].values
  209. tb = pi_table[(pi_table['name'].str.contains(seachk)) | (pi_table['comp'].str.contains(seachk))]
  210. if len(cardArray) == 0:
  211. QMessageBox.information(self, '提示信息', '没有搜索内容')
  212. else:
  213. # 每次点循环删除管理器的组件
  214. while self.gridLayout.count():
  215. # 获取第一个组件
  216. item = self.gridLayout.takeAt(0)
  217. widget = item.widget()
  218. # 删除组件
  219. widget.deleteLater()
  220. i = -1
  221. for n in range(len(cardArray)):
  222. # x 确定每行显示的个数 012 每行3
  223. x = n % 3
  224. # 当x为0的时候设置换行 行数+1
  225. if x == 0:
  226. i += 1
  227. item = griditem()
  228. item.label_8.setText('姓名:' + str(cardArray[n][0]))
  229. item.label_9.setText('公司:' + str(cardArray[n][1]))
  230. item.label_10.setText('电话:' + str(cardArray[n][2]))
  231. item.label_11.setText('手机:' + str(cardArray[n][3]))
  232. item.label_12.setText('邮箱:' + str(cardArray[n][4]))
  233. item.label_13.setText('地址:' + str(cardArray[n][5]))
  234. # 设置名称 为获取项目行数
  235. item.pushButton.setObjectName(str(tb.index.tolist()[n]))
  236. item.pushButton_3.setObjectName(str(tb.index.tolist()[n]))
  237. # 为按钮绑定点击事件
  238. item.pushButton.clicked.connect(self.edit)
  239. item.pushButton_3.clicked.connect(self.deletedata)
  240. # 动态给gridlayout添加布局
  241. self.gridLayout.addWidget(item, i, x)
  242. # 设置上下滑动控件可以滑动 把scrollAreaWidgetContents_2添加到scrollArea中
  243. self.scrollAreaWidgetContents.setMinimumHeight(i * 200)
  244. # girdlayout 添加到滑动控件中
  245. self.scrollAreaWidgetContents.setLayout(self.gridLayout)
  246. #显示全部数据
  247. def dataall(self):
  248. # 每次点循环删除管理器的组件
  249. while self.gridLayout.count():
  250. # 获取第一个组件
  251. item = self.gridLayout.takeAt(0)
  252. widget = item.widget()
  253. # 删除组件
  254. widget.deleteLater()
  255. i=-1
  256. # 读取文件内容
  257. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  258. # 获取所有数据
  259. cardArray = pi_table.values
  260. # 循环数据
  261. for n in range(len(cardArray)):
  262. # x 确定每行显示的个数 012 每行3
  263. x = n % 3
  264. # 当x为0的时候设置换行,即行数+1
  265. if x == 0:
  266. i += 1
  267. item = griditem()
  268. item.label_8.setText('姓名:'+str(cardArray[n][0]))
  269. item.label_9.setText('公司:'+str(cardArray[n][1]))
  270. item.label_10.setText('电话:'+str(cardArray[n][2]))
  271. item.label_11.setText('手机:'+str(cardArray[n][3]))
  272. item.label_12.setText('邮箱:'+str(cardArray[n][4]))
  273. item.label_13.setText('地址:'+str(cardArray[n][5]))
  274. # 设置名称 为获取项目行数
  275. item.pushButton.setObjectName(str(pi_table.index.tolist()[n]))
  276. item.pushButton_3.setObjectName(str(pi_table.index.tolist()[n]))
  277. # 为按钮绑定点击事件
  278. item.pushButton.clicked.connect(self.edit)
  279. item.pushButton_3.clicked.connect(self.deletedata)
  280. # 动态添加控件到gridlayout中
  281. self.gridLayout.addWidget(item,i, x)
  282. # 设置上下滑动控件可以滑动 把scrollAreaWidgetContents_2添加到scrollArea中
  283. self.scrollAreaWidgetContents.setMinimumHeight(i*200)
  284. # 设置gridlayout到滑动控件中
  285. self.scrollAreaWidgetContents.setLayout(self.gridLayout)
  286. pass
  287. # 删除数据方法
  288. def deletedata(self):
  289. # 获取信号源 点击的按钮
  290. sender = self.gridLayout.sender()
  291. # 获取按钮名称
  292. indexName = sender.objectName()
  293. # 获取表信息
  294. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  295. # 根据行号删除数据
  296. data=pi_table.drop(index=[int(indexName)], axis=0)
  297. # 更新xlsx文件
  298. DataFrame(data).to_excel(path + '名片信息表.xlsx',
  299. sheet_name='data', index=False)
  300. # 显示全部数据
  301. self.dataall()
  302. # 编辑数据
  303. def edit(self):
  304. # 获取信号源 点击的按钮
  305. sender = self.gridLayout.sender()
  306. # 获取按钮名称
  307. indexName=sender.objectName()
  308. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  309. # 根据行号 获取数据
  310. cardArray =pi_table.iloc[[indexName]].values
  311. # 打开编辑页面
  312. editWindow.OPEN()
  313. # 设置数据
  314. editWindow.lineEdit.setText(str(cardArray[0][0]))
  315. editWindow.lineEdit_2.setText(str(cardArray[0][1]))
  316. editWindow.lineEdit_3.setText(str(cardArray[0][2]))
  317. editWindow.lineEdit_4.setText(str(cardArray[0][3]))
  318. editWindow.lineEdit_5.setText(str(cardArray[0][4]))
  319. editWindow.lineEdit_6.setText(str(cardArray[0][5]))
  320. # 设置按钮名称
  321. editWindow.pushButton_2.setObjectName(str(indexName))
  322. pass
  323. # 显示部分数据
  324. def dataother(self,typeAZ):
  325. # 每次点循环删除管理器的组件
  326. while self.gridLayout.count():
  327. # 获取第一个组件
  328. item = self.gridLayout.takeAt(0)
  329. # 获取布局
  330. widget = item.widget()
  331. # 删除组件
  332. widget.deleteLater()
  333. pass
  334. # 读取文件内容
  335. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  336. i = -1
  337. # 筛选内容
  338. cardArray = pi_table[pi_table['type'] == typeAZ].values
  339. tb= pi_table[pi_table['type'] == typeAZ]
  340. for n in range(len(cardArray)):
  341. # x 确定每行显示的个数 012 每行3
  342. x = n % 3
  343. # 当x为0的时候设置换行 行数+1
  344. if x == 0:
  345. i += 1
  346. item = griditem()
  347. item.label_8.setText('姓名:' + str(cardArray[n][0]))
  348. item.label_9.setText('公司:' + str(cardArray[n][1]))
  349. item.label_10.setText('电话:' + str(cardArray[n][2]))
  350. item.label_11.setText('手机:' + str(cardArray[n][3]))
  351. item.label_12.setText('邮箱:' + str(cardArray[n][4]))
  352. item.label_13.setText('地址:' + str(cardArray[n][5]))
  353. # 设置名称 为获取项目行数
  354. item.pushButton.setObjectName(str(tb.index.tolist()[n]))
  355. item.pushButton_3.setObjectName(str(tb.index.tolist()[n]))
  356. # 为按钮绑定点击事件
  357. item.pushButton.clicked.connect(self.edit)
  358. item.pushButton_3.clicked.connect(self.deletedata)
  359. # 动态设置控件
  360. self.gridLayout.addWidget(item, i, x)
  361. # 动态设置滑动控件滑动高度
  362. self.scrollAreaWidgetContents.setMinimumHeight(i * 200)
  363. # giridLayout 添加到滑动控件中
  364. self.scrollAreaWidgetContents.setLayout(self.gridLayout)
  365. #添加名片页面
  366. class childWindow(QWidget,addpage.Ui_Form):
  367. # 初始化方法
  368. def __init__(self):
  369. # 找到父类 添加名片页面
  370. super(childWindow, self).__init__()
  371. # 初始化页面方法
  372. self.setupUi(self)
  373. # 给选择名片按钮添加事件
  374. self.pushButton.clicked.connect(self.openfile)
  375. # 给保存按钮添加事件
  376. self.pushButton_2.clicked.connect(self.keep)
  377. #保存名片信息到文档
  378. def keep(self):
  379. pi_table = pd.read_excel(path + '名片信息表.xlsx', sheet_name='data')
  380. # 获取输出框内容
  381. name =self.lineEdit.text()
  382. comp = self.lineEdit_2.text()
  383. tel= self.lineEdit_3.text()
  384. mobile= self.lineEdit_4.text()
  385. email= self.lineEdit_5.text()
  386. addr= self.lineEdit_6.text()
  387. # 判断手机号是否为空
  388. if mobile.strip():
  389. # 根据手机号判断区域
  390. try:
  391. info = phone.Phone().find(int(mobile))
  392. except Exception as e:
  393. print("根据手机号判断区域时出错",e)
  394. QMessageBox.critical(self,"错误:","手机号码不正确!",QMessageBox.Ok) # 弹出提示对话框
  395. self.lineEdit_4.setFocus() # 让手机文本框获得焦点
  396. return
  397. # 判断手机号是否正确返回信息
  398. if info==None:
  399. city = '其他'
  400. else:
  401. # 正确返回信息获取省
  402. city = info['province']
  403. else:
  404. city = '其他'
  405. # 判断姓名是否为空
  406. if name.strip():
  407. # 获取首字母拼音
  408. type=pinyintool.getPinyin(name[0])
  409. # 添加数据
  410. data = pi_table.append({'name': name,
  411. 'comp': comp,
  412. 'tel': tel,
  413. 'mobile': mobile,
  414. 'email': email,
  415. 'addr': addr,
  416. 'city': city,
  417. 'type': type,
  418. }, ignore_index=True)
  419. # 更新xlsx文件
  420. DataFrame(data).to_excel(path + '名片信息表.xlsx',
  421. sheet_name='data', index=False)
  422. # 首页面显示全部数据
  423. window.dataall()
  424. # 关闭添加页面
  425. self.close()
  426. else:
  427. QMessageBox.information(self, '提示信息', '姓名不能为空')
  428. pass
  429. # 显示添加名片页面
  430. def OPEN(self):
  431. # 移除控件上图片
  432. self.label_2.setPixmap(QPixmap(""))
  433. # 移除输入框内容
  434. self.lineEdit.setText("")
  435. self.lineEdit_2.setText("")
  436. self.lineEdit_3.setText("")
  437. self.lineEdit_4.setText("")
  438. self.lineEdit_5.setText("")
  439. self.lineEdit_6.setText("")
  440. # 显示页面
  441. self.show()
  442. #选择名片按钮执行方法
  443. def openfile(self):
  444. # 启动选择文件对话空,查找jpg以及png图片
  445. self.download_path = QFileDialog.getOpenFileName(self, "选择要识别的图片", "/", "Image Files(*.jpg *.png)")
  446. # 判断是否选择图片
  447. if not self.download_path[0].strip():
  448. # 没有选择图片执行
  449. # 消息对话框 information 提问对话框 question 警告对话框 warning
  450. # 严重错误对话框 critical 关于对话框 about
  451. QMessageBox.information(self, '提示信息', '没有选择名片图片')
  452. pass
  453. else:
  454. # 选择图片执行
  455. # 图片路径self.download_path[0]
  456. # 理由pixmap解析图片
  457. pixmap = QPixmap(self.download_path[0])
  458. # 设置图片
  459. self.label_2.setPixmap(pixmap)
  460. # 让图片自适应label大小
  461. self.label_2.setScaledContents (True)
  462. try:
  463. # 识别名片图片返回识别结果
  464. content=self.recg()
  465. except:
  466. QMessageBox.information(self, '提示信息', '识别错误请重新选择图片')
  467. cjson = json.loads(content)
  468. # 判断是否正确返回内容
  469. if cjson['code']=='0':
  470. # 名称
  471. self.dcontent(1, cjson)
  472. # 公司
  473. self.dcontent(2, cjson)
  474. # 电话
  475. self.dcontent(3, cjson)
  476. # 手机
  477. self.dcontent(4, cjson)
  478. # 邮件
  479. self.dcontent(5, cjson)
  480. # 地址
  481. self.dcontent(6, cjson)
  482. else:
  483. QMessageBox.information(self, '提示信息', '信息码-'+cjson['code']+
  484. ' 请去官网http://developer.hanvon.com/api/toAPIinfo.do?id=2&num= 查看原因')
  485. pass
  486. #设置识别显示的内容
  487. def dcontent(self,k,count):
  488. try:
  489. if k==1:
  490. self.lineEdit.setText(count['name'][0])
  491. elif k==2:
  492. self.lineEdit_2.setText(count['comp'][0])
  493. elif k==3:
  494. self.lineEdit_3.setText(count['tel'][0])
  495. elif k==4:
  496. self.lineEdit_4.setText(count['mobile'][0])
  497. elif k==5:
  498. self.lineEdit_5.setText(count['email'][0])
  499. elif k==6:
  500. self.lineEdit_6.setText(count['addr'][0])
  501. except:
  502. pass
  503. # 信号槽 点击按钮显示大图功能
  504. def wichbtn(self):
  505. # 使用电脑中的看图工具打开图片
  506. img = Image.open(self.download_path[0])
  507. # 显示图片
  508. img.show()
  509. # 识别名片图片
  510. def recg(self):
  511. # 汉王云名片接口 API申请地址
  512. # http://developer.hanvon.com
  513. # 请将您申请的Key写到项目根目录下的key.txt文件中,并且将其写在第一行
  514. with open('key.txt',"r") as file:
  515. key = file.readline() # 读取写到key.txt文件中的您申请的Key
  516. url = 'https://api.hanvon.com/rt/ws/v1/ocr/bcard/recg?key=%s&code=91f6a58d-e418-4e58-8ec2-61b583c55ba2' % key
  517. img = Image.open(self.download_path[0])
  518. # 设置模式L为灰度图
  519. img2 = img.convert('L')
  520. _w = img2.width
  521. _h = img2.height
  522. img2 = img2.resize((int(_w), int(_h)), Image.ANTIALIAS)
  523. img2.save('card_gray.jpg')
  524. base64img = base64.b64encode(open('card_gray.jpg', 'rb').read()).decode()
  525. '''
  526. lang:指定使用的语言。值为:auto(多语言)、chns(中文简体)、chnt(中文繁体)、en(英文)
  527. color:指定颜色。值为gray(进行灰度处理)、color(原图像未做任何处理 上传图像的类型)
  528. image:指定名片图像的base64串
  529. '''
  530. data = {"lang": 'auto', "color": 'gray', "image": base64img}
  531. headers = {"Content-Type": "application/octet-stream"}
  532. resp = requests.post(url, data=json.dumps(data), headers=headers)
  533. return resp.text
  534. if __name__=='__main__':
  535. # 每一个PyQt5应用都必须创建一个应用对象
  536. app=QApplication(sys.argv)
  537. # 初始化页面
  538. window=parentWindow()
  539. # 显示首页
  540. window.show()
  541. child = childWindow()
  542. # 初始化编辑页面
  543. editWindow = editWindow()
  544. # 显示联系人窗体
  545. htmlwidows = HtmlWindows()
  546. # 添加按钮添加事件
  547. window.pushButton_2.clicked.connect(child.OPEN)
  548. # 项目结束调用
  549. sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/464727
推荐阅读
相关标签
  

闽ICP备14008679号