在桌面上显示你的每日计划(提醒事项)

此博客中涉及到的知识点

  1. PyQt设置窗口完全透明但内部控件不透明的方法
  2. 动态更新控件的方法
  3. PyQt 给窗口设置一个右键菜单
  4. PyQt 实现鼠标拖动窗口
  5. 文件操作
  6. 字符串方法

这里以我写的小程序为例 介绍前4个方法如何实现

PyQt设置窗口完全透明但内部控件不透明的方法

在窗口初始化时加上下面两句话即可

self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
self.setAttribute(Qt.WA_TranslucentBackground)

动态更新控件(控件个数及内容)的方法

Qt提供了很好的方法去做这种操作,前提是你控件中的个数不需要动态地去改变,有兴趣可以去了解一下,我这里并没有采用这种主流的方法,而是利用类属性去记录子控件引用的方法。在源代码Remind类 函数show_()中得到了体现。

PyQt 给窗口设置一个右键菜单/鼠标拖动

这里只需要重写其父类的contextMenuEvent(self,event)方法就好,示例:

class Remind(QDialog):
    def __init__(self, parent=None):
        super(Remind, self).__init__(parent)
        self.move_point = 0
        self.mouse_press = False
    # 添加右键菜单
    def contextMenuEvent(self, event):
        menu = QMenu(self)
        add_remind = QAction('添加今日提醒事项')
        if self.load_file_tag == True:
            add_remind.setText('更换提醒事项')
        menu.addAction(add_remind)
        add_remind.triggered.connect(self.loadfile)
        clo = menu.addAction('关闭')
        clo.triggered.connect(self.F_close)
        menu.exec_(event.globalPos())  # 获取当前光标
   	# 以下三个函数为实现鼠标拖动窗口功能
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.setMouseTracking(True)
            self.mouse_press = True
            self.move_point = event.pos()

    def mouseReleaseEvent(self, event):
        self.mouse_press = False

    def mouseMoveEvent(self, event):
        if self.mouse_press:
            move_pos = event.globalPos()
            self.move(move_pos - self.move_point)

下面给出桌面提醒事项的打包好的小程序和源代码

# encoding:utf-8
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class Remind(QDialog):
    def __init__(self, parent=None):
        super(Remind, self).__init__(parent)
        self.move_point = 0
        self.mouse_press = False
        self.load_file_tag = False
        self.settings = {'title': '今日提醒', 'color': 'red', 'font': '楷体', 'size': 30, 'remindlist': []}
        self.label_list = []

        self.layout = QVBoxLayout()
        self.title = QLabel("右键添加今日目标")
        self.title.setFont(QFont(self.settings['font'], self.settings['size']))
        self.title.setAlignment(Qt.AlignCenter)
        self.title.setStyleSheet("color:red")
        self.layout.addWidget(self.title)

        self.setLayout(self.layout)

        # 设置窗口透明,控件不透明
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # end

    # 以下三个函数为实现鼠标拖动窗口功能
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.setMouseTracking(True)
            self.mouse_press = True
            self.move_point = event.pos()

    def mouseReleaseEvent(self, event):
        self.mouse_press = False

    def mouseMoveEvent(self, event):
        if self.mouse_press:
            move_pos = event.globalPos()
            self.move(move_pos - self.move_point)

    # 添加右键菜单
    def contextMenuEvent(self, event):
        menu = QMenu(self)
        add_remind = QAction('添加今日提醒事项')
        if self.load_file_tag == True:
            add_remind.setText('更换提醒事项')
        menu.addAction(add_remind)
        add_remind.triggered.connect(self.loadfile)
        clo = menu.addAction('关闭')
        clo.triggered.connect(self.F_close)
        menu.exec_(event.globalPos())  # 获取当前光标

    def loadfile(self):
        f_name = QFileDialog.getOpenFileName(self, '添加今日提醒事项', '//', "提醒事项(*.txt)")
        if self.load_file_tag == True:  # 如果已经读取过一次,则覆盖
            self.settings['remindlist'].clear()
        if f_name[0] == '':
            pass
        else:
            with open(f_name[0], 'r') as fp:
                remindlist = fp.readlines()
        # 对读取的文件进行规格化:
            list_start = 0  # 具体事项从第0行开始
            if remindlist == []:
                QMessageBox.about(self, '提示', '该文件为空,请重新选择!')
            else:
                if remindlist[0][0] == '#':
                    list_start = 1
                    parm = remindlist[0][1:-1].split(' ')  # 过滤掉首字母'#'和尾字母'\n'
                    parm = [i.split('=') for i in parm]
                    for j in parm[:-1]:
                        if j[0] in self.settings:  # 如果用户添加了可设置属性 则更改
                            self.settings[j[0]] = j[1]
                # 添加具体的事项
                for i in remindlist[list_start:-1]:
                    self.settings['remindlist'].append(i[:-1])
                if remindlist[-1][0] != '#':
                    self.settings['remindlist'].append(remindlist[-1])
        self.show_()  # 参数读取完成,将参数信息显示到界面上

    def show_(self):
        # 更新title信息
        self.title.setText(self.settings['title'])
        for i in self.label_list:  # 先把上一次的label清除
            i.clear()
            self.layout.removeWidget(i)
        self.title.setText(self.settings['title'])
        self.title.setFont(QFont(self.settings['font'], int(self.settings['size'])))
        self.title.setStyleSheet("color:" + self.settings['color'])
        # 显示具体的提醒事项
        if self.settings['remindlist'] == []:
            QMessageBox.about(self, '提示', '该文件无具体待办事项!')
        else:
            for i in self.settings['remindlist']:
                buf = QLabel('·' + i)
                buf.setFont(QFont(self.settings['font'], int(self.settings['size'])))
                buf.setStyleSheet("color:" + self.settings['color'])
                self.label_list.append(buf)
                self.layout.addWidget(buf)
        self.load_file_tag = True  # 真正在窗口显示了才算一次读取操作
        print(self.layout.count())

    def F_close(self):
        sys.exit()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Remind()
    demo.show()
    sys.exit(app.exec_())

在本地文档中填写提醒事项及结果

下面为提醒事项填写格式,其中第一行可以省略,属性也可以缺省
提醒事项填写格式,其中第一行可以省略,属性也可以缺省
运行展示结果

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
桌面背景上显示文字是一种常见的个性化设置,它可以让我们在使用电脑时更加方便地获取一些信息或者提醒。首先要实现这个功能,我们可以通过以下步骤来进行: 第一步,找到电脑的“个性化”设置。不同的操作系统可能稍有不同,但一般都可以在桌面右键点击,然后选择“个性化”或类似字样来找到这个设置。 第二步,进入“个性化”设置之后,找到“桌面背景”或类似字样的选项。这个选项通常会显示一些预设的壁纸或背景图片。 第三步,选择自定义的背景图片。在这个选项下,我们可以添加自己的图片作为桌面背景,也可以从预设的壁纸库中选择喜欢的图片。如果没有自己的图片,我们可以通过搜索引擎下载一些带有文字的背景图片。 第四步,调整文字显示的设置。在选择好背景图片之后,我们可以选择文字的颜色、字体、大小等。有些操作系统甚至可以设置文字的透明度,以确保文字与背景图片的融合。 第五步,保存并应用设置。在完成所有的设置之后,记得点击保存或应用按钮,使设置生效。 通过上述步骤,我们就可以在桌面背景上显示文字了。这样我们就可以在桌面上方便地看到一些重要的信息,如待办事项提醒事项或个人标语等。当然,如果我们想要更加高级的显示效果,可以使用一些第三方软件或工具来实现更多自定义的功能,如添加动态效果或特殊的字体样式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值