python - 设置 python 应用程序的到期日期

标签 python tkinter

亲爱的程序员们,您好,

我已经用 pyinstaller 生成了一个 EXE。然而,我希望这个 EXE 的有效期只有 6 个月,这样用户就必须从下载中心重新下载带有更新的改进版 EXE。有什么办法可以在程序代码中添加这个吗?

不幸的是,我无法包含标准更新功能,因为用户通常没有互联网。

我很好奇你的建议。非常感谢大家!我附上了下面的一小段程序。

import tkinter as tk
from tkinter import ttk



class Win1:
    def __init__(self, master):
        
        self.master = master 
        self.topFrame = tk.Frame(self.master)
        self.topFrame.grid(row=0, column=0, sticky='news', ipady = 5)
        self.B_GapFrame = tk.Frame(self.master)
        self.master.resizable(False, False)         



        self.gapType = tk.StringVar(self.master)
        self.choiceGap =  ['RBC, TUR']
        self.gapType.set('') # set the default option
        self.ctngMenu = tk.OptionMenu(self.topFrame, self.gapType, *self.choiceGap, command=self.choose_gap_handle)
        self.ctngMenu.config(width=40)    
        self.LabelGap = tk.Label(self.topFrame, text="Select TYPE")
        self.LabelGap.grid(row = 3, column = 0,sticky = "W")
        self.ctngMenu.grid(row = 3, column =2,sticky = "W", columnspan = 3)
        
        
        self.frameVar = tk.StringVar(self.master)
        self.choiceFrame = "Test"
        self.frameVar.set('') # set the default option
        self.frameMenu = ttk.Combobox(self.topFrame, values= self.choiceFrame, state = "readonly", justify = "center", textvariable = self.frameVar, width = 12)
        self.frameMenu.grid(row = 1, column =2,sticky = "W", pady = 7, columnspan = 3)
        self.LabelFrame =  tk.Label(self.topFrame, text="Select TUR     ")
        self.LabelFrame.grid(row = 1, column = 0,sticky = "W",pady =7)
                                       


    def choose_gap_handle(self, selected_Gap):
            
        if selected_Gap == 'RBC, TUR':
            self.B_GapFrame.tkraise()
            self.B_GapFrame.grid(row=2, column=0, sticky='news') 

        
root = tk.Tk()
root.geometry("+50+50")
app = Win1(root)
root.mainloop()

最佳答案

这完全取决于你想变得多么“残酷”。

一种选择可能是在代码中添加硬编码日期,例如

import datetime
RLS_DATE = datetime.date(2021, 02, 24)

然后在主代码部分之前,如下所示:

if datetime.date.today() - RLS_DATE > 7 * 30: # about 7 months
    # as @TheLizzard suggested delete the executable.
    # You might do this only if running under 
    # py2exe to avoid deleting your own source code
    if getattr(sys, 'frozen', False):
        os.remove(sys.argv[0]) 
elif datetime.date.today() - RLS_DATE > 6 * 30: # about 6 months
    # write your own coded, that shows just a popup and lets the user
    # continue using the app.

如果您不想硬编码发布日期,您可以编写一个更智能的脚本来创建可执行文件并为 py2exe 添加一些数据,其中包含编译可执行文件的日期。

我所说的残忍是什么意思。

要么只显示一个弹出窗口,用户应该更新,

或添加弹出窗口并阻止用户界面 x 秒。 用户不更新的时间越长,延迟可能会增加

或者直接退出程序

甚至删除该程序

当然,所有这些选项都不安全。 这仅适用于标准用户。

如果有人坚持运行您的程序,他可以修改生成的可执行文件以忽略日期。

关于python - 设置 python 应用程序的到期日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66349225/

相关文章:

python - 从 Tensorflow 模型获取预测

python - 使用现有列作为多索引重新索引数据框

python - 处理或引发 Python 异常是否有效?

python - 在 Tkinter 中为一组小部件添加滚动条

python - Tkinter 按钮距窗口边缘的距离

python - 给定最小/最大的多个两列集,如果数字落在最小/最大之间,如何返回索引

python - 我可以打印出类的实例名称吗?

python - 使用 tkinter 分配全局变量并销毁 gui

python - 随着字符串的增长,字体中的 Tkinter 字符串与文本小部件中的字符串不同

python - 向 Tkinter 添加单选按钮