python

用Python瞬间撸一个小程序,解决Win10时间栏不能显示星期

2020-03-25  本文已影响0人  曹帅军

废话少说,直接上代码:

import tkinter as tk, time

bg = '#%02x%02x%02x' % (55,64,79)
dictWeekdays = {'0':'星期日','1':'星期一','2':'星期二','3':'星期三','4':'星期四','5':'星期五','6':'星期六'}

root = tk.Tk()
root.geometry("86x40+2474+1400")
root["background"] = bg
root.overrideredirect(True)

label = tk.Label(root, bg = bg, fg = 'white')
label.pack()  

def on_update():
    root.wm_attributes('-topmost',True)
    localtime = time.localtime(time.time())
    w = dictWeekdays[time.strftime("%w", localtime)]
    m = time.strftime("%H:%M ", localtime)
    date = time.strftime("\n%Y-%m-%d", localtime)

    label['text'] = m + w + date
    root.after(20000, on_update)

on_update()
root.mainloop()

效果:


效果.jpg

说明:

  1. 我的显示器分辨率是2560x1440,所以将窗口位置设置为2474x1400,隐藏窗口标题栏,设置窗口和文字的背景颜色为系统任务栏的背景色,这样正好能覆盖Win10默认的系统时间显示位置;
  2. 每隔20秒自动更新一次时间;
  3. 每次更新时,都将窗口重新置顶。因为当使用快捷键Win+D显示桌面时,所有程序的窗口都会被最小化,该tk窗口也会被隐藏,所以自动将窗口重新置顶显示;
  4. 每次客户询盘几天能发货时,都要手动查看一下今天是星期几!因为国际快递周末发不出的!以后宝宝再也不用烦躁的点来点去啦。。。

然后再稍微改进一下:

import tkinter as tk, datetime

bg = '#%02x%02x%02x' % (55,64,79)
dictWeekdays = {'0':'星期日','1':'星期一','2':'星期二','3':'星期三','4':'星期四','5':'星期五','6':'星期六'}
dictHoursOffset = {
    '澳大利亚': 3,
    '日本': 1,    # 比北京快1小时
    '中东': -4,
    '俄罗斯': -4,
    '南非': -6,   
    '欧洲': -7,
    '英国': -8,
    '美国': -12,
}

class WinMain():
    def __init__(self):
        self.winPop = None
        self.root = tk.Tk()
        self.root.geometry("86x40+2474+1400")
        self.root["background"] = bg
        self.root.overrideredirect(True)
        self.label = tk.Label(self.root, bg = bg, fg = 'white')
        self.label.pack()  
        self.label.bind("<Button-1>", self.onBtnClick1)
        self.on_update()
        self.root.mainloop()

    def update_winpop(self):
        if self.winPop is not None:
            self.winPop.close()
            self.winPop = None
        else:
            self.winPop = WinPop(self.root)

    def onBtnClick1(self, event):
        self.update_winpop()

    def on_update(self):
        self.root.wm_attributes('-topmost',True)
        now = datetime.datetime.now()
        w = dictWeekdays[now.strftime("%w")]
        m = now.strftime("%H:%M ")
        date = now.strftime("\n%Y-%m-%d")
        self.label['text'] = m + w + date
        self.root.after(3000, self.on_update)


class WinPop():
    def __init__(self, winRoot):
        self.win = tk.Toplevel(winRoot, bg = bg)
        self.win.geometry("86x600+2474+800")
        self.win.overrideredirect(True)
        self.lf = tk.Label(self.win, text='', bg = bg, fg = 'white', font=("微软雅黑", 12))
        self.update()
        self.lf.pack()

    def close(self):
        self.win.destroy()

    def update(self):
        now = datetime.datetime.now()
        s = '\n'
        for k,v in dictHoursOffset.items():
            newtime = now + datetime.timedelta(hours = v)
            m = newtime.strftime("%H:%M ")
            s += (k + '\n' + m + '\n\n')

        self.lf['text'] = s

class App():
    def __init__(self):
        self.win_main = WinMain()

if __name__ == "__main__":
    app = App()

说明:

  1. 面向对象;
  2. 增加世界时间显示功能;
  3. 鼠标点击一次Label,就显示时间时间,再点击,取消时间时间显示。


    效果.jpg
上一篇 下一篇

猜你喜欢

热点阅读