以图搜图pyqt5+py+selenium写的小工具源码(供学习交流)

  • A+
所属分类:Python合集

这是一个搜图工具的全套源码,可以用来在入门pyqt5和selenium时学习使用,大概能获得如下知识点:

1.selenium操作打开浏览器并执行相关操作,切换窗口页面标签等。

2.通过selenium上传图片文件到网站页面并提交。

3.pyqt5绘制ui界面的完整演示并且链接逻辑函数实现交互。

4.pyqt5其他ui相关的操作等。

  1. from selenium import webdriver
  2. from time import sleep
  3. from selenium.webdriver.support.ui import  WebDriverWait
  4. def init():
  5. global driver
  6.     driver = webdriver.Chrome(executable_path='chromedriver.exe')
  7.     driver.maximize_window()
  8. def baidu(path):#国内
  9.     js = "window.open('http://www.baidu.com')"
  10.     driver.execute_script(js)
  11. #driver.get("https://www.baidu.com")
  12. #driver.maximize_window()
  13. #定位相机按钮
  14.     driver.switch_to.window(driver.window_handles[-1])
  15.     driver.find_element_by_css_selector(".soutu-btn").click()
  16.     sleep(1)
  17.     driver.find_element_by_css_selector(".upload-pic").send_keys(path)
  18. def yandex(path):#墙外
  19. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  20. #这个站用get方式打开能正确获取到按钮,用js方式打开标签后无法获取,element not visible 然后超时
  21.     js = "window.open('https://www.yandex.com/images/','_blank');"
  22. #我并不知道如何打开一个空标签,但是传入空格会导致无法get方式打开网页,遂传入了_blank
  23.     driver.execute_script(js)
  24.     driver.switch_to.window(driver.window_handles[-1])
  25.     driver.get("https://www.yandex.com/images/")
  26. #不知道原因,现在采取先打开一个空标签,再用get方式打开网钻
  27. #driver.maximize_window()
  28. #yandex好像有异步加载,css会变化,按钮状态被隐藏
  29. # if (driver.find_element_by_xpath("//span[@class='input__box']/span[2]").is_displayed()):
  30. #     driver.find_element_by_xpath("//span[@class='input__box']/span[2]").click()
  31. #     print("1")
  32. # else:
  33. #     for i in range(1,5):
  34. #         sleep(2)
  35. # js2 = "document.querySelectorAll('span.input__box>span')[1].style.visibility='visible';"
  36. # driver.execute_script(js2)
  37. #elm = WebDriverWait(driver,5,1).until(lambda x:x.find_elements_by_css_selector("span.input__box>span")[1])
  38.     sleep(1)
  39.     elm = WebDriverWait(driver, 6, 1)
  40. #elm.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.icon.icon_type_cbir.input__button'))).click()
  41.     elm.until(lambda x: x.find_element_by_css_selector(".icon.icon_type_cbir.input__button")).click()
  42. #
  43. # x = driver.find_elements_by_css_selector("span.input__box>span")
  44. # print(x)
  45.     driver.find_element_by_css_selector(".cbir-panel__file-input").send_keys(path)
  46. def img_360(path):#国内
  47. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  48.     js = "window.open('https://image.so.com/')"
  49.     driver.execute_script(js)
  50.     driver.switch_to.window(driver.window_handles[-1])
  51. # driver.get("https://image.so.com/")
  52. #driver.maximize_window()
  53.     driver.find_element_by_css_selector(".icon_st").click()
  54.     sleep(1)
  55.     driver.find_element_by_css_selector("#stUpload").send_keys(path)
  56. def pic_sogou(path):#国内
  57. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  58. #driver.get("https://pic.sogou.com/")
  59.     js = "window.open('https://pic.sogou.com/')"
  60.     driver.execute_script(js)
  61.     driver.switch_to.window(driver.window_handles[-1])
  62. #driver.maximize_window()
  63.     driver.find_element_by_css_selector(".camera-ico").click()
  64.     sleep(1)
  65.     driver.find_element_by_css_selector("#upload_pic_file").send_keys(path)
  66. def google(path):#墙外
  67. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  68. #driver.get("https://www.google.com/imghp")
  69.     js = "window.open('https://www.google.com/imghp')"
  70.     driver.execute_script(js)
  71.     driver.switch_to.window(driver.window_handles[-1])
  72. #driver.maximize_window()
  73.     driver.find_element_by_css_selector(".S3Wjs").click()
  74.     sleep(1)
  75.     driver.find_element_by_css_selector("#qbfile").send_keys(path)
  76. def tineye(path):#墙外
  77. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  78. # driver.get("https://www.tineye.com/")
  79.     js = "window.open('https://www.tineye.com/')"
  80.     driver.execute_script(js)
  81.     driver.switch_to.window(driver.window_handles[-1])
  82. #driver.maximize_window()
  83.     sleep(1)
  84.     driver.find_element_by_css_selector("#upload_box").send_keys(path)
  85. def wait(path):
  86. # driver=webdriver.Chrome(executable_path='chromedriver.exe')
  87. # driver.get("https://trace.moe/")
  88.     js = "window.open('https://trace.moe/')"
  89.     driver.execute_script(js)
  90.     driver.switch_to.window(driver.window_handles[-1])
  91. #driver.maximize_window()
  92.     driver.find_element_by_css_selector("#file").send_keys(path)
  93.     sleep(1)
  94.     driver.find_element_by_css_selector("#searchBtn").click()
  95. def ascii2d(path):#二次元,画像,本子,番
  96. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  97. # driver.get("https://ascii2d.net/")
  98.     js = "window.open('https://ascii2d.net/')"
  99.     driver.execute_script(js)
  100.     driver.switch_to.window(driver.window_handles[-1])
  101.     sleep(1)
  102.     driver.find_element_by_css_selector("#file-form").send_keys(path)
  103. def iqdb(path):#二次元,画像,本子,番
  104. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  105. #  driver.get("http://www.iqdb.org/")
  106.     js = "window.open('http://www.iqdb.org/')"
  107.     driver.execute_script(js)
  108.     driver.switch_to.window(driver.window_handles[-1])
  109.     driver.find_element_by_css_selector("#file").send_keys(path)
  110.     sleep(1)
  111.     driver.find_element_by_xpath("//input[@value='submit']").click()
  112. def saucenao(path):#二次元,画像,本子,番
  113. #driver = webdriver.Chrome(executable_path='chromedriver.exe')
  114. # driver.get("http://saucenao.com/")
  115.     js = "window.open('http://saucenao.com/')"
  116.     driver.execute_script(js)
  117.     driver.switch_to.window(driver.window_handles[-1])
  118.     driver.find_element_by_css_selector("#file").send_keys(path)
  119.     sleep(1)
  120.     driver.find_element_by_xpath("//input[@value='get sauce']").click()
  121. def pimeyes(path):#人脸识别
  122. #driver=webdriver.Chrome(executable_path='chromedriver.exe')
  123. #driver.get("https://pimeyes.com/")
  124. # driver.maximize_window()
  125.     js = "window.open('https://pimeyes.com/')"
  126.     driver.execute_script(js)
  127.     driver.switch_to.window(driver.window_handles[-1])
  128. #yandex好像有异步加载,css会变化
  129.     elm = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//i[@class='material-icons']"))
  130.     elm.click()
  131.     driver.find_element_by_tag_name("input").send_keys(path)

 

 

上面是函数的代码部分,下面是ui界面部分。

 

 

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'gif_soso2.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.11.3
  5. #
  6. # WARNING! All changes made in this file will be lost!
  7. from PyQt5 import QtCore, QtWidgets
  8. from PyQt5.QtWidgets import QFileDialog,QHeaderView,QMessageBox,QDesktopWidget,QApplication
  9. from PyQt5.QtCore import QDir
  10. import gif_soso
  11. import sys
  12. import threading
  13. '''
  14. #对不起,我还是不会多线程
  15. class RunThread(QtCore.QThread):
  16.     def __init__(self):
  17.         super(RunThread,self).__init__()
  18.         
  19.     def run(self):   
  20.         Ui_MainWindow.start()
  21.  '''
  22. class Ui_MainWindow(object):
  23. def getFiles(self):
  24. # 实例化QFileDialog
  25.         dig = QFileDialog()
  26. # 设置可以打开任何文件
  27.         dig.setFileMode(QFileDialog.AnyFile)
  28. # 文件过滤
  29.         dig.setFilter(QDir.Files)
  30. if dig.exec_():
  31. # 接受选中文件的路径,默认为列表
  32.             filenames = dig.selectedFiles()
  33. # 列表中的第一个元素即是文件路径,以只读的方式打开文件
  34. dir = str(filenames[0])
  35.             t = threading.Thread(target=self.start(dir))
  36.             t.start()
  37. #self.start(dir)
  38. #print(dir)
  39. def messageUI(self,s_name):
  40.         ms = QMessageBox()
  41. # ms.setGeometry(300, 300, 300, 220)
  42. #设置居中
  43.         qr = ms.frameGeometry()
  44.         cp = QDesktopWidget().availableGeometry().center()
  45.         qr.moveCenter(cp)
  46.         ms.move(qr.topLeft())
  47.         ms.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
  48.         ms.setWindowTitle('Error')
  49.         QMessageBox.about(ms, "Error", "啊哦!<"+s_name+">引擎出现了未知的错误...")
  50. def start(self,dir):
  51.         gif_soso.init()
  52.         QApplication.processEvents()
  53. if self.checkBox.isChecked():
  54. try:
  55.                 gif_soso.baidu(dir)
  56. except:
  57. self.messageUI("百度")
  58. if self.checkBox_2.isChecked():
  59. try:
  60.                 gif_soso.pic_sogou(dir)
  61. except:
  62. self.messageUI("搜狗")
  63. if self.checkBox_3.isChecked():
  64. try:
  65.                 gif_soso.img_360(dir)
  66. except:
  67. self.messageUI("360")
  68. if self.checkBox_4.isChecked():
  69. try:
  70.                 gif_soso.google(dir)
  71. except:
  72. self.messageUI("google")
  73. if self.checkBox_9.isChecked():
  74. try:
  75.                 gif_soso.yandex(dir)
  76. except:
  77. self.messageUI("yandex")
  78. if self.checkBox_10.isChecked():
  79. try:
  80.                 gif_soso.tineye(dir)
  81. except:
  82. self.messageUI("tineye")
  83. if self.checkBox_11.isChecked():
  84. try:
  85.                 gif_soso.wait(dir)
  86. except:
  87. self.messageUI("WAIT")
  88. if self.checkBox_12.isChecked():
  89. try:
  90.                 gif_soso.ascii2d(dir)
  91. except:
  92. self.messageUI("Ascii2d")
  93. if self.checkBox_13.isChecked():
  94. try:
  95.                 gif_soso.iqdb(dir)
  96. except:
  97. self.messageUI("IQDB")
  98. if self.checkBox_16.isChecked():
  99. try:
  100.                 gif_soso.saucenao(dir)
  101. except:
  102. self.messageUI("SauceNAO")
  103. if self.checkBox_14.isChecked():
  104. try:
  105.                 gif_soso.pimeyes(dir)
  106. except:
  107. self.messageUI("pimeyes")
  108. # elif self.checkBox_12.isChecked():
  109. #     gif_soso
  110. def setupUi(self, MainWindow):
  111. #ms = self.messageUI()\
  112. #设置窗口置顶
  113.         MainWindow.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
  114.         MainWindow.setObjectName("MainWindow")
  115.         MainWindow.resize(637, 521)
  116.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
  117.         sizePolicy.setHorizontalStretch(0)
  118.         sizePolicy.setVerticalStretch(0)
  119.         sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
  120.         MainWindow.setSizePolicy(sizePolicy)
  121.         MainWindow.setMinimumSize(QtCore.QSize(637, 521))
  122.         MainWindow.setMaximumSize(QtCore.QSize(637, 521))
  123. self.centralwidget = QtWidgets.QWidget(MainWindow)
  124. self.centralwidget.setObjectName("centralwidget")
  125. self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
  126. self.tabWidget.setGeometry(QtCore.QRect(0, 10, 631, 471))
  127.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
  128.         sizePolicy.setHorizontalStretch(0)
  129.         sizePolicy.setVerticalStretch(0)
  130.         sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
  131. self.tabWidget.setSizePolicy(sizePolicy)
  132. self.tabWidget.setMinimumSize(QtCore.QSize(631, 471))
  133. self.tabWidget.setMaximumSize(QtCore.QSize(631, 471))
  134. self.tabWidget.setWhatsThis("")
  135. self.tabWidget.setObjectName("tabWidget")
  136. self.tab = QtWidgets.QWidget()
  137. self.tab.setObjectName("tab")
  138. self.pushButton = QtWidgets.QPushButton(self.tab)
  139. self.pushButton.setGeometry(QtCore.QRect(10, 10, 147, 28))
  140. self.pushButton.setObjectName("pushButton")
  141. self.pushButton.clicked.connect(self.getFiles)
  142. self.checkBox = QtWidgets.QCheckBox(self.tab)
  143. self.checkBox.setGeometry(QtCore.QRect(30, 100, 91, 19))
  144. self.checkBox.setObjectName("checkBox")
  145. self.label = QtWidgets.QLabel(self.tab)
  146. self.label.setGeometry(QtCore.QRect(30, 60, 111, 31))
  147. self.label.setObjectName("label")
  148. self.checkBox_2 = QtWidgets.QCheckBox(self.tab)
  149. self.checkBox_2.setGeometry(QtCore.QRect(130, 100, 91, 19))
  150. self.checkBox_2.setObjectName("checkBox_2")
  151. self.checkBox_3 = QtWidgets.QCheckBox(self.tab)
  152. self.checkBox_3.setGeometry(QtCore.QRect(230, 100, 91, 21))
  153. self.checkBox_3.setObjectName("checkBox_3")
  154. self.label_2 = QtWidgets.QLabel(self.tab)
  155. self.label_2.setGeometry(QtCore.QRect(30, 140, 111, 31))
  156. self.label_2.setObjectName("label_2")
  157. self.checkBox_4 = QtWidgets.QCheckBox(self.tab)
  158. self.checkBox_4.setGeometry(QtCore.QRect(30, 180, 91, 19))
  159. self.checkBox_4.setObjectName("checkBox_4")
  160. self.checkBox_9 = QtWidgets.QCheckBox(self.tab)
  161. self.checkBox_9.setGeometry(QtCore.QRect(130, 180, 91, 19))
  162. self.checkBox_9.setObjectName("checkBox_9")
  163. self.checkBox_10 = QtWidgets.QCheckBox(self.tab)
  164. self.checkBox_10.setGeometry(QtCore.QRect(230, 180, 91, 19))
  165. self.checkBox_10.setObjectName("checkBox_10")
  166. self.label_5 = QtWidgets.QLabel(self.tab)
  167. self.label_5.setGeometry(QtCore.QRect(30, 220, 111, 31))
  168. self.label_5.setObjectName("label_5")
  169. self.checkBox_11 = QtWidgets.QCheckBox(self.tab)
  170. self.checkBox_11.setGeometry(QtCore.QRect(30, 260, 91, 19))
  171. self.checkBox_11.setObjectName("checkBox_11")
  172. self.checkBox_12 = QtWidgets.QCheckBox(self.tab)
  173. self.checkBox_12.setGeometry(QtCore.QRect(130, 260, 91, 19))
  174. self.checkBox_12.setObjectName("checkBox_12")
  175. self.checkBox_13 = QtWidgets.QCheckBox(self.tab)
  176. self.checkBox_13.setGeometry(QtCore.QRect(230, 260, 91, 19))
  177. self.checkBox_13.setObjectName("checkBox_13")
  178. self.label_6 = QtWidgets.QLabel(self.tab)
  179. self.label_6.setGeometry(QtCore.QRect(30, 300, 111, 31))
  180. self.label_6.setObjectName("label_6")
  181. self.checkBox_14 = QtWidgets.QCheckBox(self.tab)
  182. self.checkBox_14.setGeometry(QtCore.QRect(30, 340, 371, 19))
  183. self.checkBox_14.setObjectName("checkBox_14")
  184. self.checkBox_15 = QtWidgets.QCheckBox(self.tab)
  185. self.checkBox_15.setGeometry(QtCore.QRect(30, 370, 321, 19))
  186. self.checkBox_15.setObjectName("checkBox_15")
  187. self.checkBox_16 = QtWidgets.QCheckBox(self.tab)
  188. self.checkBox_16.setGeometry(QtCore.QRect(310, 260, 91, 19))
  189. self.checkBox_16.setObjectName("checkBox_16")
  190. self.tabWidget.addTab(self.tab, "")
  191. self.tab_2 = QtWidgets.QWidget()
  192. self.tab_2.setObjectName("tab_2")
  193. self.tableWidget = QtWidgets.QTableWidget(self.tab_2)
  194. self.tableWidget.setGeometry(QtCore.QRect(10, 10, 611, 421))
  195. self.tableWidget.setObjectName("tableWidget")
  196. self.tableWidget.setColumnCount(3)
  197. self.tableWidget.setRowCount(6)
  198. self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  199.         item = QtWidgets.QTableWidgetItem()
  200. self.tableWidget.setVerticalHeaderItem(0, item)
  201.         item = QtWidgets.QTableWidgetItem()
  202. self.tableWidget.setVerticalHeaderItem(1, item)
  203.         item = QtWidgets.QTableWidgetItem()
  204. self.tableWidget.setVerticalHeaderItem(2, item)
  205.         item = QtWidgets.QTableWidgetItem()
  206. self.tableWidget.setVerticalHeaderItem(3, item)
  207.         item = QtWidgets.QTableWidgetItem()
  208. self.tableWidget.setVerticalHeaderItem(4, item)
  209.         item = QtWidgets.QTableWidgetItem()
  210. self.tableWidget.setVerticalHeaderItem(5, item)
  211.         item = QtWidgets.QTableWidgetItem()
  212. self.tableWidget.setVerticalHeaderItem(6, item)
  213.         item = QtWidgets.QTableWidgetItem()
  214. self.tableWidget.setVerticalHeaderItem(7, item)
  215.         item = QtWidgets.QTableWidgetItem()
  216. self.tableWidget.setHorizontalHeaderItem(0, item)
  217.         item = QtWidgets.QTableWidgetItem()
  218. self.tableWidget.setHorizontalHeaderItem(1, item)
  219.         item = QtWidgets.QTableWidgetItem()
  220. self.tableWidget.setHorizontalHeaderItem(2, item)
  221.         item = QtWidgets.QTableWidgetItem()
  222. self.tableWidget.setItem(0, 0, item)
  223.         item = QtWidgets.QTableWidgetItem()
  224. self.tableWidget.setItem(0, 1, item)
  225.         item = QtWidgets.QTableWidgetItem()
  226. self.tableWidget.setItem(0, 2, item)
  227.         item = QtWidgets.QTableWidgetItem()
  228. self.tableWidget.setItem(1, 0, item)
  229.         item = QtWidgets.QTableWidgetItem()
  230. self.tableWidget.setItem(1, 1, item)
  231.         item = QtWidgets.QTableWidgetItem()
  232. self.tableWidget.setItem(1, 2, item)
  233.         item = QtWidgets.QTableWidgetItem()
  234. self.tableWidget.setItem(2, 0, item)
  235.         item = QtWidgets.QTableWidgetItem()
  236. self.tableWidget.setItem(2, 1, item)
  237.         item = QtWidgets.QTableWidgetItem()
  238. self.tableWidget.setItem(2, 2, item)
  239.         item = QtWidgets.QTableWidgetItem()
  240. self.tableWidget.setItem(3, 0, item)
  241.         item = QtWidgets.QTableWidgetItem()
  242. self.tableWidget.setItem(3, 1, item)
  243.         item = QtWidgets.QTableWidgetItem()
  244. self.tableWidget.setItem(3, 2, item)
  245.         item = QtWidgets.QTableWidgetItem()
  246. self.tableWidget.setItem(4, 0, item)
  247.         item = QtWidgets.QTableWidgetItem()
  248. self.tableWidget.setItem(4, 1, item)
  249.         item = QtWidgets.QTableWidgetItem()
  250. self.tableWidget.setItem(4, 2, item)
  251.         item = QtWidgets.QTableWidgetItem()
  252. self.tableWidget.setItem(5, 0, item)
  253.         item = QtWidgets.QTableWidgetItem()
  254. self.tableWidget.setItem(5, 1, item)
  255.         item = QtWidgets.QTableWidgetItem()
  256. self.tableWidget.setItem(5, 2, item)
  257. self.tabWidget.addTab(self.tab_2, "")
  258. self.tab_3 = QtWidgets.QWidget()
  259. self.tab_3.setObjectName("tab_3")
  260. self.textBrowser = QtWidgets.QTextBrowser(self.tab_3)
  261. self.textBrowser.setGeometry(QtCore.QRect(10, 10, 601, 421))
  262. self.textBrowser.setObjectName("textBrowser")
  263. self.tabWidget.addTab(self.tab_3, "")
  264. self.tab_4 = QtWidgets.QWidget()
  265. self.tab_4.setObjectName("tab_4")
  266. self.textBrowser_2 = QtWidgets.QTextBrowser(self.tab_4)
  267. self.textBrowser_2.setGeometry(QtCore.QRect(0, 0, 631, 451))
  268. self.textBrowser_2.setObjectName("textBrowser_2")
  269. self.tabWidget.addTab(self.tab_4, "")
  270.         MainWindow.setCentralWidget(self.centralwidget)
  271. self.menubar = QtWidgets.QMenuBar(MainWindow)
  272. self.menubar.setGeometry(QtCore.QRect(0, 0, 637, 26))
  273. self.menubar.setObjectName("menubar")
  274.         MainWindow.setMenuBar(self.menubar)
  275. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  276. self.statusbar.setObjectName("statusbar")
  277.         MainWindow.setStatusBar(self.statusbar)
  278. self.retranslateUi(MainWindow)
  279. self.tabWidget.setCurrentIndex(0)
  280.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  281. def retranslateUi(self, MainWindow):
  282.         _translate = QtCore.QCoreApplication.translate
  283.         MainWindow.setWindowTitle(_translate("MainWindow", "以图搜图——图片反向搜索找图片出处的懒人小工具"))
  284. self.pushButton.setText(_translate("MainWindow", "...选择一张图片..."))
  285. self.checkBox.setText(_translate("MainWindow", "百度"))
  286. self.checkBox.setChecked(True)
  287. self.label.setText(_translate("MainWindow", "国内"))
  288. self.checkBox_2.setText(_translate("MainWindow", "搜狗"))
  289. self.checkBox_3.setText(_translate("MainWindow", "360"))
  290. self.label_2.setText(_translate("MainWindow", "墙外"))
  291. self.checkBox_4.setText(_translate("MainWindow", "google"))
  292. self.checkBox_9.setText(_translate("MainWindow", "yandex"))
  293. self.checkBox_10.setText(_translate("MainWindow", "tineye"))
  294. self.label_5.setText(_translate("MainWindow", "二次元向"))
  295. self.checkBox_11.setText(_translate("MainWindow", "WAIT"))
  296. self.checkBox_12.setText(_translate("MainWindow", "Ascii2d"))
  297. self.checkBox_13.setText(_translate("MainWindow", "IQDB"))
  298. self.label_6.setText(_translate("MainWindow", "其他"))
  299. self.checkBox_14.setText(_translate("MainWindow", "pimeyes(人脸识别神器级别,需付费查看结果)"))
  300. self.checkBox_15.setText(_translate("MainWindow", "<后续待添加...>"))
  301. self.checkBox_16.setText(_translate("MainWindow", "SauceNAO"))
  302. self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "图片搜索"))
  303.         item = self.tableWidget.verticalHeaderItem(0)
  304.         item.setText(_translate("MainWindow", "1"))
  305.         item = self.tableWidget.verticalHeaderItem(1)
  306.         item.setText(_translate("MainWindow", "2"))
  307.         item = self.tableWidget.verticalHeaderItem(2)
  308.         item.setText(_translate("MainWindow", "3"))
  309.         item = self.tableWidget.verticalHeaderItem(3)
  310.         item.setText(_translate("MainWindow", "4"))
  311.         item = self.tableWidget.verticalHeaderItem(4)
  312.         item.setText(_translate("MainWindow", "5"))
  313.         item = self.tableWidget.verticalHeaderItem(5)
  314.         item.setText(_translate("MainWindow", "6"))
  315.         item = self.tableWidget.verticalHeaderItem(6)
  316.         item = self.tableWidget.horizontalHeaderItem(0)
  317.         item.setText(_translate("MainWindow", "站点"))
  318.         item = self.tableWidget.horizontalHeaderItem(1)
  319.         item.setText(_translate("MainWindow", "链接"))
  320.         item = self.tableWidget.horizontalHeaderItem(2)
  321.         item.setText(_translate("MainWindow", "介绍"))
  322.         __sortingEnabled = self.tableWidget.isSortingEnabled()
  323. self.tableWidget.setSortingEnabled(False)
  324.         item = self.tableWidget.item(0, 0)
  325.         item.setText(_translate("MainWindow", "拍立淘"))
  326.         item = self.tableWidget.item(0, 1)
  327.         item.setText(_translate("MainWindow", "https://www.pailitao.com"))
  328.         item = self.tableWidget.item(0, 2)
  329.         item.setText(_translate("MainWindow", "商品反向搜索"))
  330.         item = self.tableWidget.item(1, 0)
  331.         item.setText(_translate("MainWindow", "EveryPixel"))
  332.         item = self.tableWidget.item(1, 1)
  333. #item.setText(u'<a href="http://www.qq.com" style="color:#0000ff;"><b> 腾 讯 首 页 </b></a>')
  334.         item.setText(_translate("MainWindow", "https://www.everypixel.com"))
  335.         item = self.tableWidget.item(1, 2)
  336.         item.setText(_translate("MainWindow", "设计素材反向搜索"))
  337.         item = self.tableWidget.item(2, 0)
  338.         item.setText(_translate("MainWindow", "链图云"))
  339.         item = self.tableWidget.item(2, 1)
  340.         item.setText(_translate("MainWindow", "http://www.lianty.com"))
  341.         item = self.tableWidget.item(2, 2)
  342.         item.setText(_translate("MainWindow", "设计素材反向搜索"))
  343.         item = self.tableWidget.item(3, 0)
  344.         item.setText(_translate("MainWindow", "看图识花"))
  345.         item = self.tableWidget.item(3, 1)
  346.         item.setText(_translate("MainWindow", "http://stu.iplant.cn/web"))
  347.         item = self.tableWidget.item(3, 2)
  348.         item.setText(_translate("MainWindow", "花朵反向搜索"))
  349.         item = self.tableWidget.item(4, 0)
  350.         item.setText(_translate("MainWindow", "美图秀秀"))
  351.         item = self.tableWidget.item(4, 1)
  352.         item.setText(_translate("MainWindow", "http://xiuxiu.web.meitu.com"))
  353.         item = self.tableWidget.item(4, 2)
  354.         item.setText(_translate("MainWindow", "在线处理图片"))
  355.         item = self.tableWidget.item(5, 0)
  356.         item.setText(_translate("MainWindow", "bigjpg"))
  357.         item = self.tableWidget.item(5, 1)
  358.         item.setText(_translate("MainWindow", "https://bigjpg.com"))
  359.         item = self.tableWidget.item(5, 2)
  360.         item.setText(_translate("MainWindow", "图片无损放大"))
  361. self.tableWidget.setSortingEnabled(__sortingEnabled)
  362. self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "其他使用相关"))
  363. self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
  364. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
  365. "p, li { white-space: pre-wrap; }\n"
  366. "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
  367. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
  368. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">1.软件根据相关搜索引擎做了分类,使用时勾选你想使用的搜索引擎,然后选择本地图片,程序便会自动调用<b>“谷歌浏览器”</b>对勾选的搜索引擎依次进行搜索。</span></p>\n"
  369. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;\"><br /></p>\n"
  370. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">2.墙外分类需要挂上梯子然后进行搜索,程序没有集成梯子。</span></p>\n"
  371. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;\"><br /></p>\n"
  372. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">3.搜索之后如果结果不理想,可以在图片的</span><span style=\" font-size:11pt; font-weight:600;\">搜索框后面加上关键词,</span><span style=\" font-size:11pt;\">例如搜索一件衣服,加上“黄色”,“nike logo”,“出处”这些关键词再搜索,会更精准。</span></p>\n"
  373. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;\"><br /></p>\n"
  374. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">4.善用图片处理工具对图片进行处理后再搜索,例如</span><span style=\" font-size:11pt; font-weight:600;\">去除水印,去杂边,去遮挡,裁剪</span><span style=\" font-size:11pt;\">多余部分,或者</span><span style=\" font-size:11pt; font-weight:600;\">无损放大</span><span style=\" font-size:11pt;\">图片等,相关工具灵活运用,作了部分推荐。</span></p>\n"
  375. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;\"><br /></p>\n"
  376. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">5.如果是要</span><span style=\" font-size:11pt; font-weight:600;\">识别人脸</span><span style=\" font-size:11pt;\">的,</span><span style=\" font-size:11pt; font-weight:600;\">pimeyes</span><span style=\" font-size:11pt;\">引擎亲测很强,可以预览一下,也许你就心里有数了,不过如果需要进一步查看具体结果,需要付费。</span></p>\n"
  377. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;\"><br /></p>\n"
  378. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">6.。。。</span></p></body></html>"))
  379. self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "使用小提示"))
  380. self.textBrowser_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
  381. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
  382. "p, li { white-space: pre-wrap; } a{ color:black; }\n"
  383. "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
  384. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
  385. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
  386. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">-作者:KONMIN</p>\n"
  387. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
  388. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">-主页:<a href=\"http://www.heyby.cn\" target=\"blank\">http://www.heyby.cn</a></p>\n"
  389. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
  390. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">-版本:v0.0.0 (学习过程作品大概率不再更新)</p></body></html>"))
  391. self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "关于"))
  392. #设置可以打开控件内的超链接
  393. self.textBrowser_2.setOpenExternalLinks(True)
  394. if __name__ == '__main__':
  395.     app = QtWidgets.QApplication(sys.argv)
  396.     window = QtWidgets.QMainWindow()
  397.     ui = Ui_MainWindow()
  398.     ui.setupUi(window)
  399.     window.show()
  400. sys.exit(app.exec_())

 

如此,便可以编译出之前发布的搜图小工具,逻辑都是极其简单的,适合新手入门学习。个人认为新手学习一个小项目了解所有相关知识是最快的,做起来也更加能便于理解深入,网上这类完整的源码不多,都是截取片段,新手拿去看了也不会用,就例如当初这个pyqt5的ui界面,跟着网上杂七杂八的教程写了之后,不知道怎么写入口,最终不能显示,兜兜转转,又无从下手,连问题都摸不着,更何况找解决方法了。

 

如果这套源码对你有用,希望路过点个赞,在此时发文评论功能失效了,后面能不能恢复就不好说了,如果有什么问题,可以直接Q我或者后台投稿。另外如果转载,烦请注明出处,谢谢~

HeyBy

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: