美文网首页
托盘程序增加退出验证

托盘程序增加退出验证

作者: Bug2Coder | 来源:发表于2019-08-01 10:52 被阅读0次
# -*- coding:utf-8 -*-
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMessageBox, QSystemTrayIcon, QMenu, qApp, QAction, QDesktopWidget, QWidget
from PyQt5.QtCore import Qt, pyqtSignal
import sys


class SystemTray(object):
    # 程序托盘类
    def __init__(self, w):
        self.app = app
        self.w = w
        QApplication.setQuitOnLastWindowClosed(False)  # 禁止默认的closed方法,只能使用qapp.quit()的方法退出程序
        self.w.show()  # 不设置显示则为启动最小化到托盘
        self.tp = QSystemTrayIcon(self.w)
        self.initUI()
        self.run()

    def initUI(self):
        # 设置托盘图标

        self.tp.setIcon(QIcon('./demo.ico'))

    def quitApp(self):
        dialog = Dialog(self.w)  # 必需传入窗口对象为父窗口,不能为托盘对象
        dialog.dialogSignel.connect(self.slot_emit)
        dialog.show()


    def slot_emit(self, flag,str):
        if int(str):
            self.tp.setVisible(False)  # 隐藏托盘控件,托盘图标刷新不及时,提前隐藏
            qApp.quit()  # 退出程序

    def message(self):
        # 提示信息被点击方法
        print("弹出的信息被点击了")

    def act(self, reason):
        # 主界面显示方法
        # 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击
        if reason == 2 or reason == 3:
            self.w.show()

    def run(self):

        a1 = QAction('&显示(Show)', triggered=self.w.show)
        a2 = QAction('&退出(Exit)', triggered=self.quitApp)

        tpMenu = QMenu()
        tpMenu.addAction(a1)
        tpMenu.addAction(a2)
        self.tp.setContextMenu(tpMenu)
        self.tp.show()  # 不调用show不会显示系统托盘消息,图标隐藏无法调用

        # 信息提示
        # 参数1:标题
        # 参数2:内容
        # 参数3:图标(0没有图标 1信息图标 2警告图标 3错误图标),0还是有一个小图标
        self.tp.showMessage('Hello', '我藏好了', icon=0)
        # 绑定提醒信息点击事件
        self.tp.messageClicked.connect(self.message)
        # 绑定托盘菜单点击事件
        self.tp.activated.connect(self.act)
        sys.exit(self.app.exec_())  # 持续对app的连接


class Window(QWidget):
    # 主窗口类
    def __init__(self):
        # move()方法移动了窗口到屏幕坐标x=300, y=300的位置.
        super(Window, self).__init__()
        self.initUI()
    def initUI(self):
        # 主窗口布局实现略。。。
        self.setWindowTitle('Test') # 设置标题
        self.setWindowIcon(QIcon('./demo.ico')) # 设置标题图标
        self.resize(300, 250) # 设置窗体大小
        self.setFixedSize(self.width(), self.height())  # 固定窗口大小
        self.center() # 窗体屏幕居中显示
        self.tray() # 程序实现托盘

    def tray(self):
        # 创建托盘程序
        ti = SystemTray(self)

    def center(self):
        # 窗口居中方法
        # 获得窗口
        qr = self.frameGeometry()
        # 获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        # 显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

class Dialog(QDialog):
    # 退出验证对话框
    dialogSignel = pyqtSignal(int, str)

    def __init__(self, parent=None):
        self.password = '123456'
        super(Dialog, self).__init__(parent)
        layout = QVBoxLayout(self)
        self.setWindowTitle('提示')
        self.setWindowIcon(QIcon('{}/demo.ico'.format(this_path)))
        self.label = QLabel(self)
        self.edit = QLineEdit()
        self.edit.setEchoMode(QLineEdit.Password)
        self.label.setText("当前操作需要您输入密码")
        layout.addWidget(self.label)
        layout.addWidget(self.edit)

        buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self)
        buttons.accepted.connect(self.accept)  # 点击ok
        buttons.rejected.connect(self.reject)  # 点击cancel
        layout.addWidget(buttons)

    def accept(self):  # 点击ok是发送内置信号
        if self.edit.text() == self.password:
            self.dialogSignel.emit(0, '1')   # 第二位参数必需为字符串
        else:
            self.dialogSignel.emit(0, '0')
        self.destroy()

    def reject(self):  # 点击cancel时,发送自定义信号
        self.dialogSignel.emit(1, '0')
        self.destroy()

if __name__ == "__main__":
    # 创建一个app程序
    app = QApplication(sys.argv)
    # 创建窗口
    win = Window()
    sys.exit(app.exec_()) 

相关文章

  • 托盘程序增加退出验证

  • 托盘程序

    需要导入 import wx.adv 官网地址:https://docs.wxpython.org/wx.adv....

  • 软件层系统功能模块——托盘管理

    books项目是一个托盘程序,程序登录后直接进入Windows系统托盘。Qt程序是跨平台程序,由于有些平台没有系统...

  • student Information Administrati

    代码 教师功能验证 学生功能验证 登录界面退出验证 通过一个小程序的逻辑进一步熟悉对列表和字典的操作。比较烦人的是...

  • Qt5 程序系统托盘

    对于Qt GUI程序,如果想要实现当最小化时,程序从任务栏消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通...

  • 使用 DataAnnotations 进行模型验证

    通过为模型类增加数据描述的 DataAnnotations ,我们可以容易地为应用程序增加验证的功能。DataAn...

  • 工厂物流自动化-仓库物料自动出入

    能够实现工件超重超宽检测、物料条码识别、不合格托盘退出、整托盘出库、零星取料自动回库等。 绿色小车可以根据节拍和负...

  • Android开发之自动填充短信验证码

    笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短...

  • 小程序接口加密

    场景 小程序请求的所有接口参数必须加密,后台返回数据也需要加密,并且增加Token验证 一、小程序端功能编写 1....

  • windows端工作细节

    Flora:点叉叉直接收到托盘,因为目前做不了动画,所以感觉会有点突兀,而且托盘有可能是隐藏状态,这里需要增加点提...

网友评论

      本文标题:托盘程序增加退出验证

      本文链接:https://www.haomeiwen.com/subject/znxqdctx.html