却道天凉好个秋~
这是一个搜图工具的全套源码,可以用来在入门pyqt5和selenium时学习使用,大概能获得如下知识点:
1.selenium操作打开浏览器并执行相关操作,切换窗口页面标签等。
2.通过selenium上传图片文件到网站页面并提交。
3.pyqt5绘制ui界面的完整演示并且链接逻辑函数实现交互。
4.pyqt5其他ui相关的操作等。
- from selenium import webdriver
- from time import sleep
- from selenium.webdriver.support.ui import WebDriverWait
- def init():
- global driver
- driver = webdriver.Chrome(executable_path='chromedriver.exe')
- driver.maximize_window()
- def baidu(path):#国内
- js = "window.open('http://www.baidu.com')"
- driver.execute_script(js)
- #driver.get("https://www.baidu.com")
- #driver.maximize_window()
- #定位相机按钮
- driver.switch_to.window(driver.window_handles[-1])
- driver.find_element_by_css_selector(".soutu-btn").click()
- sleep(1)
- driver.find_element_by_css_selector(".upload-pic").send_keys(path)
- def yandex(path):#墙外
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- #这个站用get方式打开能正确获取到按钮,用js方式打开标签后无法获取,element not visible 然后超时
- js = "window.open('https://www.yandex.com/images/','_blank');"
- #我并不知道如何打开一个空标签,但是传入空格会导致无法get方式打开网页,遂传入了_blank
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- driver.get("https://www.yandex.com/images/")
- #不知道原因,现在采取先打开一个空标签,再用get方式打开网钻
- #driver.maximize_window()
- #yandex好像有异步加载,css会变化,按钮状态被隐藏
- # if (driver.find_element_by_xpath("//span[@class='input__box']/span[2]").is_displayed()):
- # driver.find_element_by_xpath("//span[@class='input__box']/span[2]").click()
- # print("1")
- # else:
- # for i in range(1,5):
- # sleep(2)
- # js2 = "document.querySelectorAll('span.input__box>span')[1].style.visibility='visible';"
- # driver.execute_script(js2)
- #elm = WebDriverWait(driver,5,1).until(lambda x:x.find_elements_by_css_selector("span.input__box>span")[1])
- sleep(1)
- elm = WebDriverWait(driver, 6, 1)
- #elm.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.icon.icon_type_cbir.input__button'))).click()
- elm.until(lambda x: x.find_element_by_css_selector(".icon.icon_type_cbir.input__button")).click()
- #
- # x = driver.find_elements_by_css_selector("span.input__box>span")
- # print(x)
- driver.find_element_by_css_selector(".cbir-panel__file-input").send_keys(path)
- def img_360(path):#国内
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- js = "window.open('https://image.so.com/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- # driver.get("https://image.so.com/")
- #driver.maximize_window()
- driver.find_element_by_css_selector(".icon_st").click()
- sleep(1)
- driver.find_element_by_css_selector("#stUpload").send_keys(path)
- def pic_sogou(path):#国内
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- #driver.get("https://pic.sogou.com/")
- js = "window.open('https://pic.sogou.com/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- #driver.maximize_window()
- driver.find_element_by_css_selector(".camera-ico").click()
- sleep(1)
- driver.find_element_by_css_selector("#upload_pic_file").send_keys(path)
- def google(path):#墙外
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- #driver.get("https://www.google.com/imghp")
- js = "window.open('https://www.google.com/imghp')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- #driver.maximize_window()
- driver.find_element_by_css_selector(".S3Wjs").click()
- sleep(1)
- driver.find_element_by_css_selector("#qbfile").send_keys(path)
- def tineye(path):#墙外
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- # driver.get("https://www.tineye.com/")
- js = "window.open('https://www.tineye.com/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- #driver.maximize_window()
- sleep(1)
- driver.find_element_by_css_selector("#upload_box").send_keys(path)
- def wait(path):
- # driver=webdriver.Chrome(executable_path='chromedriver.exe')
- # driver.get("https://trace.moe/")
- js = "window.open('https://trace.moe/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- #driver.maximize_window()
- driver.find_element_by_css_selector("#file").send_keys(path)
- sleep(1)
- driver.find_element_by_css_selector("#searchBtn").click()
- def ascii2d(path):#二次元,画像,本子,番
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- # driver.get("https://ascii2d.net/")
- js = "window.open('https://ascii2d.net/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- sleep(1)
- driver.find_element_by_css_selector("#file-form").send_keys(path)
- def iqdb(path):#二次元,画像,本子,番
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- # driver.get("http://www.iqdb.org/")
- js = "window.open('http://www.iqdb.org/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- driver.find_element_by_css_selector("#file").send_keys(path)
- sleep(1)
- driver.find_element_by_xpath("//input[@value='submit']").click()
- def saucenao(path):#二次元,画像,本子,番
- #driver = webdriver.Chrome(executable_path='chromedriver.exe')
- # driver.get("http://saucenao.com/")
- js = "window.open('http://saucenao.com/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- driver.find_element_by_css_selector("#file").send_keys(path)
- sleep(1)
- driver.find_element_by_xpath("//input[@value='get sauce']").click()
- def pimeyes(path):#人脸识别
- #driver=webdriver.Chrome(executable_path='chromedriver.exe')
- #driver.get("https://pimeyes.com/")
- # driver.maximize_window()
- js = "window.open('https://pimeyes.com/')"
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[-1])
- #yandex好像有异步加载,css会变化
- elm = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//i[@class='material-icons']"))
- elm.click()
- driver.find_element_by_tag_name("input").send_keys(path)
上面是函数的代码部分,下面是ui界面部分。
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'gif_soso2.ui'
- #
- # Created by: PyQt5 UI code generator 5.11.3
- #
- # WARNING! All changes made in this file will be lost!
- from PyQt5 import QtCore, QtWidgets
- from PyQt5.QtWidgets import QFileDialog,QHeaderView,QMessageBox,QDesktopWidget,QApplication
- from PyQt5.QtCore import QDir
- import gif_soso
- import sys
- import threading
- '''
- #对不起,我还是不会多线程
- class RunThread(QtCore.QThread):
- def __init__(self):
- super(RunThread,self).__init__()
- def run(self):
- Ui_MainWindow.start()
- '''
- class Ui_MainWindow(object):
- def getFiles(self):
- # 实例化QFileDialog
- dig = QFileDialog()
- # 设置可以打开任何文件
- dig.setFileMode(QFileDialog.AnyFile)
- # 文件过滤
- dig.setFilter(QDir.Files)
- if dig.exec_():
- # 接受选中文件的路径,默认为列表
- filenames = dig.selectedFiles()
- # 列表中的第一个元素即是文件路径,以只读的方式打开文件
- dir = str(filenames[0])
- t = threading.Thread(target=self.start(dir))
- t.start()
- #self.start(dir)
- #print(dir)
- def messageUI(self,s_name):
- ms = QMessageBox()
- # ms.setGeometry(300, 300, 300, 220)
- #设置居中
- qr = ms.frameGeometry()
- cp = QDesktopWidget().availableGeometry().center()
- qr.moveCenter(cp)
- ms.move(qr.topLeft())
- ms.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
- ms.setWindowTitle('Error')
- QMessageBox.about(ms, "Error", "啊哦!<"+s_name+">引擎出现了未知的错误...")
- def start(self,dir):
- gif_soso.init()
- QApplication.processEvents()
- if self.checkBox.isChecked():
- try:
- gif_soso.baidu(dir)
- except:
- self.messageUI("百度")
- if self.checkBox_2.isChecked():
- try:
- gif_soso.pic_sogou(dir)
- except:
- self.messageUI("搜狗")
- if self.checkBox_3.isChecked():
- try:
- gif_soso.img_360(dir)
- except:
- self.messageUI("360")
- if self.checkBox_4.isChecked():
- try:
- gif_soso.google(dir)
- except:
- self.messageUI("google")
- if self.checkBox_9.isChecked():
- try:
- gif_soso.yandex(dir)
- except:
- self.messageUI("yandex")
- if self.checkBox_10.isChecked():
- try:
- gif_soso.tineye(dir)
- except:
- self.messageUI("tineye")
- if self.checkBox_11.isChecked():
- try:
- gif_soso.wait(dir)
- except:
- self.messageUI("WAIT")
- if self.checkBox_12.isChecked():
- try:
- gif_soso.ascii2d(dir)
- except:
- self.messageUI("Ascii2d")
- if self.checkBox_13.isChecked():
- try:
- gif_soso.iqdb(dir)
- except:
- self.messageUI("IQDB")
- if self.checkBox_16.isChecked():
- try:
- gif_soso.saucenao(dir)
- except:
- self.messageUI("SauceNAO")
- if self.checkBox_14.isChecked():
- try:
- gif_soso.pimeyes(dir)
- except:
- self.messageUI("pimeyes")
- # elif self.checkBox_12.isChecked():
- # gif_soso
- def setupUi(self, MainWindow):
- #ms = self.messageUI()\
- #设置窗口置顶
- MainWindow.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(637, 521)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
- MainWindow.setSizePolicy(sizePolicy)
- MainWindow.setMinimumSize(QtCore.QSize(637, 521))
- MainWindow.setMaximumSize(QtCore.QSize(637, 521))
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
- self.tabWidget.setGeometry(QtCore.QRect(0, 10, 631, 471))
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
- self.tabWidget.setSizePolicy(sizePolicy)
- self.tabWidget.setMinimumSize(QtCore.QSize(631, 471))
- self.tabWidget.setMaximumSize(QtCore.QSize(631, 471))
- self.tabWidget.setWhatsThis("")
- self.tabWidget.setObjectName("tabWidget")
- self.tab = QtWidgets.QWidget()
- self.tab.setObjectName("tab")
- self.pushButton = QtWidgets.QPushButton(self.tab)
- self.pushButton.setGeometry(QtCore.QRect(10, 10, 147, 28))
- self.pushButton.setObjectName("pushButton")
- self.pushButton.clicked.connect(self.getFiles)
- self.checkBox = QtWidgets.QCheckBox(self.tab)
- self.checkBox.setGeometry(QtCore.QRect(30, 100, 91, 19))
- self.checkBox.setObjectName("checkBox")
- self.label = QtWidgets.QLabel(self.tab)
- self.label.setGeometry(QtCore.QRect(30, 60, 111, 31))
- self.label.setObjectName("label")
- self.checkBox_2 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_2.setGeometry(QtCore.QRect(130, 100, 91, 19))
- self.checkBox_2.setObjectName("checkBox_2")
- self.checkBox_3 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_3.setGeometry(QtCore.QRect(230, 100, 91, 21))
- self.checkBox_3.setObjectName("checkBox_3")
- self.label_2 = QtWidgets.QLabel(self.tab)
- self.label_2.setGeometry(QtCore.QRect(30, 140, 111, 31))
- self.label_2.setObjectName("label_2")
- self.checkBox_4 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_4.setGeometry(QtCore.QRect(30, 180, 91, 19))
- self.checkBox_4.setObjectName("checkBox_4")
- self.checkBox_9 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_9.setGeometry(QtCore.QRect(130, 180, 91, 19))
- self.checkBox_9.setObjectName("checkBox_9")
- self.checkBox_10 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_10.setGeometry(QtCore.QRect(230, 180, 91, 19))
- self.checkBox_10.setObjectName("checkBox_10")
- self.label_5 = QtWidgets.QLabel(self.tab)
- self.label_5.setGeometry(QtCore.QRect(30, 220, 111, 31))
- self.label_5.setObjectName("label_5")
- self.checkBox_11 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_11.setGeometry(QtCore.QRect(30, 260, 91, 19))
- self.checkBox_11.setObjectName("checkBox_11")
- self.checkBox_12 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_12.setGeometry(QtCore.QRect(130, 260, 91, 19))
- self.checkBox_12.setObjectName("checkBox_12")
- self.checkBox_13 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_13.setGeometry(QtCore.QRect(230, 260, 91, 19))
- self.checkBox_13.setObjectName("checkBox_13")
- self.label_6 = QtWidgets.QLabel(self.tab)
- self.label_6.setGeometry(QtCore.QRect(30, 300, 111, 31))
- self.label_6.setObjectName("label_6")
- self.checkBox_14 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_14.setGeometry(QtCore.QRect(30, 340, 371, 19))
- self.checkBox_14.setObjectName("checkBox_14")
- self.checkBox_15 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_15.setGeometry(QtCore.QRect(30, 370, 321, 19))
- self.checkBox_15.setObjectName("checkBox_15")
- self.checkBox_16 = QtWidgets.QCheckBox(self.tab)
- self.checkBox_16.setGeometry(QtCore.QRect(310, 260, 91, 19))
- self.checkBox_16.setObjectName("checkBox_16")
- self.tabWidget.addTab(self.tab, "")
- self.tab_2 = QtWidgets.QWidget()
- self.tab_2.setObjectName("tab_2")
- self.tableWidget = QtWidgets.QTableWidget(self.tab_2)
- self.tableWidget.setGeometry(QtCore.QRect(10, 10, 611, 421))
- self.tableWidget.setObjectName("tableWidget")
- self.tableWidget.setColumnCount(3)
- self.tableWidget.setRowCount(6)
- self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(3, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(4, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(5, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(6, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setVerticalHeaderItem(7, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setHorizontalHeaderItem(0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setHorizontalHeaderItem(1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setHorizontalHeaderItem(2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(0, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(0, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(0, 2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(1, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(1, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(1, 2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(2, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(2, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(2, 2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(3, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(3, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(3, 2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(4, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(4, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(4, 2, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(5, 0, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(5, 1, item)
- item = QtWidgets.QTableWidgetItem()
- self.tableWidget.setItem(5, 2, item)
- self.tabWidget.addTab(self.tab_2, "")
- self.tab_3 = QtWidgets.QWidget()
- self.tab_3.setObjectName("tab_3")
- self.textBrowser = QtWidgets.QTextBrowser(self.tab_3)
- self.textBrowser.setGeometry(QtCore.QRect(10, 10, 601, 421))
- self.textBrowser.setObjectName("textBrowser")
- self.tabWidget.addTab(self.tab_3, "")
- self.tab_4 = QtWidgets.QWidget()
- self.tab_4.setObjectName("tab_4")
- self.textBrowser_2 = QtWidgets.QTextBrowser(self.tab_4)
- self.textBrowser_2.setGeometry(QtCore.QRect(0, 0, 631, 451))
- self.textBrowser_2.setObjectName("textBrowser_2")
- self.tabWidget.addTab(self.tab_4, "")
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 637, 26))
- self.menubar.setObjectName("menubar")
- MainWindow.setMenuBar(self.menubar)
- self.statusbar = QtWidgets.QStatusBar(MainWindow)
- self.statusbar.setObjectName("statusbar")
- MainWindow.setStatusBar(self.statusbar)
- self.retranslateUi(MainWindow)
- self.tabWidget.setCurrentIndex(0)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "以图搜图——图片反向搜索找图片出处的懒人小工具"))
- self.pushButton.setText(_translate("MainWindow", "...选择一张图片..."))
- self.checkBox.setText(_translate("MainWindow", "百度"))
- self.checkBox.setChecked(True)
- self.label.setText(_translate("MainWindow", "国内"))
- self.checkBox_2.setText(_translate("MainWindow", "搜狗"))
- self.checkBox_3.setText(_translate("MainWindow", "360"))
- self.label_2.setText(_translate("MainWindow", "墙外"))
- self.checkBox_4.setText(_translate("MainWindow", "google"))
- self.checkBox_9.setText(_translate("MainWindow", "yandex"))
- self.checkBox_10.setText(_translate("MainWindow", "tineye"))
- self.label_5.setText(_translate("MainWindow", "二次元向"))
- self.checkBox_11.setText(_translate("MainWindow", "WAIT"))
- self.checkBox_12.setText(_translate("MainWindow", "Ascii2d"))
- self.checkBox_13.setText(_translate("MainWindow", "IQDB"))
- self.label_6.setText(_translate("MainWindow", "其他"))
- self.checkBox_14.setText(_translate("MainWindow", "pimeyes(人脸识别神器级别,需付费查看结果)"))
- self.checkBox_15.setText(_translate("MainWindow", "<后续待添加...>"))
- self.checkBox_16.setText(_translate("MainWindow", "SauceNAO"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "图片搜索"))
- item = self.tableWidget.verticalHeaderItem(0)
- item.setText(_translate("MainWindow", "1"))
- item = self.tableWidget.verticalHeaderItem(1)
- item.setText(_translate("MainWindow", "2"))
- item = self.tableWidget.verticalHeaderItem(2)
- item.setText(_translate("MainWindow", "3"))
- item = self.tableWidget.verticalHeaderItem(3)
- item.setText(_translate("MainWindow", "4"))
- item = self.tableWidget.verticalHeaderItem(4)
- item.setText(_translate("MainWindow", "5"))
- item = self.tableWidget.verticalHeaderItem(5)
- item.setText(_translate("MainWindow", "6"))
- item = self.tableWidget.verticalHeaderItem(6)
- item = self.tableWidget.horizontalHeaderItem(0)
- item.setText(_translate("MainWindow", "站点"))
- item = self.tableWidget.horizontalHeaderItem(1)
- item.setText(_translate("MainWindow", "链接"))
- item = self.tableWidget.horizontalHeaderItem(2)
- item.setText(_translate("MainWindow", "介绍"))
- __sortingEnabled = self.tableWidget.isSortingEnabled()
- self.tableWidget.setSortingEnabled(False)
- item = self.tableWidget.item(0, 0)
- item.setText(_translate("MainWindow", "拍立淘"))
- item = self.tableWidget.item(0, 1)
- item.setText(_translate("MainWindow", "https://www.pailitao.com"))
- item = self.tableWidget.item(0, 2)
- item.setText(_translate("MainWindow", "商品反向搜索"))
- item = self.tableWidget.item(1, 0)
- item.setText(_translate("MainWindow", "EveryPixel"))
- item = self.tableWidget.item(1, 1)
- #item.setText(u'<a href="http://www.qq.com" style="color:#0000ff;"><b> 腾 讯 首 页 </b></a>')
- item.setText(_translate("MainWindow", "https://www.everypixel.com"))
- item = self.tableWidget.item(1, 2)
- item.setText(_translate("MainWindow", "设计素材反向搜索"))
- item = self.tableWidget.item(2, 0)
- item.setText(_translate("MainWindow", "链图云"))
- item = self.tableWidget.item(2, 1)
- item.setText(_translate("MainWindow", "http://www.lianty.com"))
- item = self.tableWidget.item(2, 2)
- item.setText(_translate("MainWindow", "设计素材反向搜索"))
- item = self.tableWidget.item(3, 0)
- item.setText(_translate("MainWindow", "看图识花"))
- item = self.tableWidget.item(3, 1)
- item.setText(_translate("MainWindow", "http://stu.iplant.cn/web"))
- item = self.tableWidget.item(3, 2)
- item.setText(_translate("MainWindow", "花朵反向搜索"))
- item = self.tableWidget.item(4, 0)
- item.setText(_translate("MainWindow", "美图秀秀"))
- item = self.tableWidget.item(4, 1)
- item.setText(_translate("MainWindow", "http://xiuxiu.web.meitu.com"))
- item = self.tableWidget.item(4, 2)
- item.setText(_translate("MainWindow", "在线处理图片"))
- item = self.tableWidget.item(5, 0)
- item.setText(_translate("MainWindow", "bigjpg"))
- item = self.tableWidget.item(5, 1)
- item.setText(_translate("MainWindow", "https://bigjpg.com"))
- item = self.tableWidget.item(5, 2)
- item.setText(_translate("MainWindow", "图片无损放大"))
- self.tableWidget.setSortingEnabled(__sortingEnabled)
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "其他使用相关"))
- self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
- "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
- "p, li { white-space: pre-wrap; }\n"
- "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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"
- "<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>"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "使用小提示"))
- 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"
- "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
- "p, li { white-space: pre-wrap; } a{ color:black; }\n"
- "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
- "<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"
- "<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"
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">-作者:KONMIN</p>\n"
- "<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"
- "<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"
- "<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"
- "<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>"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "关于"))
- #设置可以打开控件内的超链接
- self.textBrowser_2.setOpenExternalLinks(True)
- if __name__ == '__main__':
- app = QtWidgets.QApplication(sys.argv)
- window = QtWidgets.QMainWindow()
- ui = Ui_MainWindow()
- ui.setupUi(window)
- window.show()
- sys.exit(app.exec_())
如此,便可以编译出之前发布的搜图小工具,逻辑都是极其简单的,适合新手入门学习。个人认为新手学习一个小项目了解所有相关知识是最快的,做起来也更加能便于理解深入,网上这类完整的源码不多,都是截取片段,新手拿去看了也不会用,就例如当初这个pyqt5的ui界面,跟着网上杂七杂八的教程写了之后,不知道怎么写入口,最终不能显示,兜兜转转,又无从下手,连问题都摸不着,更何况找解决方法了。
如果这套源码对你有用,希望路过点个赞,在此时发文评论功能失效了,后面能不能恢复就不好说了,如果有什么问题,可以直接Q我或者后台投稿。另外如果转载,烦请注明出处,谢谢~