Qt Designer设计相关服务界面实战

鳄鱼君

发表文章数:643

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Qt Designer设计相关服务界面实战

相关服务界面的效果图看到,界面分为打码服务和代理服务,这些服务都有第三方网站提供,要使用这些服务,只需在界面上设置相关的账号信息即可。对于这些服务的使用,不做详细介绍,可单击软件的“购买打码服务”和“购买代理服务”按钮,进入官网了解使用方法。

相关服务界面的设计共有7个QPushButton控件、3个QLineEdit以及其他布局控件,各个控件所实现的功能说明如下:
● 主菜单。关闭相关服务界面并运行软件主界面,实现界面之间的切换。
● 购买打码服务。单击该按钮即可在本地的浏览器打开第三方打码平台的官网。
● 购买代理服务。单击该按钮即可在本地的浏览器打开第三方代理IP平台的官网。
● 账号和密码:输入打码平台的用户账号和密码,根据账号密码调用API接口来获取验证码识别服务。
● 单号。输入代理IP平台的所提供的单号,根据单号调用API接口来获取代理IP。
● 验证。分别验证账号密码(单号)是否正确,并将账号密码(单号)写入配置文件,当软件下次运行时,无需再次设置。
● 清空。清空软件里所填写的账号密码(单号)及配置文件的信息。

界面的设计由weibo_service.uiweibo_service.py实现,软件功能由service.py实现。其中界面设计文件weibo_service.py是由weibo_service.ui转换而成,而weibo_service.ui是QT Designer的设计文件,大致的设计流程与软件主界面的一致,界面设计如图:

图上的按钮设置了按钮属性objectName和styleSheet, objectName是对控件进行命名,在代码里,操控按钮由按钮的命名实现,比如设置按钮的信号槽(触发事件);styleSheet是设置按钮的ico图标。至于界面的其他设计,可以在QT Designer打开weibo_service.ui进行修改。

界面的功能由service.py文件实现,同时该文件也是界面的运行文件。文件的代码结构与main.py相似,定义软件功能类和设置文件运行入口,具体的代码如下:

from PyQt5 import QtCore,QtGui,QtWidgets
from weibo_service import Ui_Form
import requests
import configparser
import sys
import os

# 相关服务的功能函数
class weibo_service_logic(QtWidgets.QWidget,Ui_Form):
    # 重写初始化函数
    def __init__(self,parent=None):
        super(weibo_service_logic,self).__init__(parent)
        self.setupUi(self)
        # 设置左上角的LOGO图标
        self.setWindowIcon(QtGui.QIcon('ICO/logo.png'))
        # 设置按钮购买打码服务的功能
        self.buy_code.clicked.connect(self.buy_code_def)
        # 设置按钮购买代理服务的功能
        self.buy_proxy.clicked.connect(self.buy_proxy_def)
        # 设置打码服务的验证按钮
        self.code_bt.clicked.connect(self.set_code)
        # 设置代理服务的验证按钮
        self.proxy_bt.clicked.connect(self.set_proxy)
        # 设置打码服务的清空按钮
        self.code_clean.clicked.connect(self.code_clean_def)
        # 设置代理服务的清空按钮
        self.proxy_clean.clicked.connect(self.proxy_clean_def)

        # 读取配置文件,软件再次运行无需重复设置
        conf=configparser.ConfigParser()
        if os.path.exists('./temp/conf.ini'):
            conf.read('./temp/conf.ini')
            if 'config' in conf.keys():
                temp=conf['config']
                if 'proxies' in temp.keys():
                    self.proxy_text.setText(conf['config']['proxies'])
                if 'user' in temp.keys():
                    self.code_account.setText(conf['config']['user'])
                if 'password' in temp.keys():
                    self.code_password.setText(conf['config']['password'])
    # 购买打码服务
    def buy_code_def(self):
        QtGui.QDesktopServices.openUrl(QtCore.QUrl("https://www.e1yu.com"))
    # 购买代理服务
    def buy_proxy_def(self):
        QtGui.QDesktopServices.openUrl(QtCore.QUrl("https://www.e1yu.com"))
    # 验证单号
    def set_proxy(self):
        proxy_key=self.proxy_text.text().strip()
        if proxy_key:
            # 获取代理IP:
            url=''
            res=requests.get(url)
            # 判断IP是否过期
            if 'success' in str(res.text):
                warm_info='单号未充值或单号已过期'
            else:
                warm_info='验证成功'
                conf=configparser.ConfigParser()
                if os.path.exists('./temp/conf.ini'):
                    conf.read('./temp/conf.ini')
                else:
                    conf.add_section('config')
                conf.set('config','proxies',proxy_key)
                conf.write(open('./temp/conf.ini','w'))
        else:
            warm_info='请输入单号'
        self.proxy_status.setText(warm_info)
    # 验证打码服务
    def set_code(self):
        username=self.code_account.text().strip()
        password=self.code_password.text().strip()
        url=''
        data={}
        res=requests.get(url,data=data)
        # 判断账号是否正常
        if res.json()['ret']==0:
            #写入配置文件
            conf=configparser.ConfigParser()
            if os.path.exists('./temp/conf.ini'):
                conf.read('./temp/conf.ini')
            else:
                conf.add_section('config')
            conf.set('config','user',username)
            conf.set('config','password',password)
            conf.write(open('./temp/conf.ini', 'w'))
            self.proxy_status.setText('验证成功')
        elif res.json()['ret']==-1001:
            self.proxy_status.setText('打码平台账号或密码错误')
        elif res.json()['ret']==-1007:
            self.proxy_status.setText('打码平台余额为0,请充值')
    # 清空单号设置
    def proxy_clean_def(self):
        conf=configparser.ConfigParser()
        if os.path.exists('./temp/conf.ini'):
            conf.read('./temp/conf.ini')
            conf.set('config','proxies','')
            conf.write(open('./temp/conf.ini', 'w'))
        self.proxy_status.setText('已清空单号')
        self.proxy_text.setText('')

    # 清空打码设置
    def code_clean_def(self):
        conf = configparser.ConfigParser()
        if os.path.exists('./temp/conf.ini'):
            conf.read('./temp/conf.ini')
            conf.set('config', 'yunuser', '')
            conf.set('config', 'yunpassword', '')
            conf.write(open('./temp/conf.ini', 'w'))
        self.proxy_status.setText('已清空打码平台账号和密码')
        self.code_account.setText('')
        self.code_password.setText('')
    # 运行界面
    def show_win(self):
        self.setFixedSize(self.width(),self.height())
        self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False)
        self.show()
    # 关闭界面
    def close_win(self):
        self.close()
# 文件运行入口
if __name__ == '__main__':
    app=QtWidgets.QApplication(sys.argv)
    win=weibo_service_logic()
    win.show()
    sys.exit(app.exec_())

代码定义了weibo_service_logic类,这是相关服务界面的功能类。它定义了多个类方法,这些方法是实现界面的功能,具体说明如下:
(1)__init__()用于重写初始化函数,为界面上的按钮绑定相应的功能函数。
(2)buy_code_def()在初始化函数绑定了“购买打码服务”按钮,实现浏览器访问打码平台的官网。
(3)buy_proxy_def()在初始化函数绑定了“购买代理服务”按钮,实现浏览器访问代理平台的官网。
(4)set_proxy()在初始化函数绑定了代理的“验证”按钮,根据文本框的单号与第三方平台的AIP接口进行验证,若验证成功,则写入temp文件夹的配置文件conf.ini,否则提示验证失败信息。
(5)set_code()在初始化函数绑定了打码的“验证”按钮,根据文本框的账号密码与第三方平台的API接口进行验证,若验证成功,则写入temp文件夹的配置文件conf.ini,否则提示验证失败信息。
(6)proxy_clean_def()在初始化函数中绑定了代理的“清空”按钮,实现文本框和配置文件的清空。
(7)code_clean_def()在初始化函数中绑定了打码的“清空”按钮,实现文本框和配置文件的清空。
(8)show_win()运行相关服务界面,用于main.py文件的文件运行入口。
(9)close_win()关闭相关服务界面,用于main.py文件的文件运行入口。

在service.py设置文件运行入口是为让相关服务界面单独运行,这样可方便测试软件功能是否正常。如果单独运行相关服务界面,软件的“主菜单”按钮是没有界面切换功能的,因为该按钮的功能是在main.py文件的文件运行入口设置。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Qt Designer设计相关服务界面实战》 发布于2020-06-14

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

6 + 5 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册