You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySimpleGUI启动时自动执行数据库检查函数?

在PySimpleGUI程序启动时自动运行数据库检查函数

基础方案:直接在窗口创建前调用函数

对于PySimpleGUI新手来说,最直观且易实现的方式就是在创建GUI窗口的代码之前,直接调用你的text_today()函数。程序启动时会按代码顺序从上到下执行,这样函数会在窗口显示前自动运行。

注意:你的函数里存在一处语法错误——repeats_left +-1需改为repeats_left -= 1,否则会触发运行报错。修正后的函数如下:

def text_today():
    conn = create_connection(database)
    c = conn.cursor()
    c.execute("SELECT * FROM PATIENT WHERE REPEAT_DATE = ?", 
    (string_of_today,)) # 检查数据库中是否有患者的复诊日期为今日
    results = c.fetchall()
    for row in results:
        first_name = row[1]
        repeats_left = row[8]
        repeats_left -= 1  # 修正语法错误
        c.execute("UPDATE PATIENT SET REPEATS_LEFT = ? WHERE FIRST_NAME = ?", 
        (repeats_left, first_name,))
        conn.commit()
        
        print(repeats_left)
        print(first_name)
        print(results)
        flow_twilio(first_name, repeats_left) 
        # 通过Twilio发送短信,告知患者复诊时间及剩余复诊次数
    conn.close()

完整程序示例

将函数调用放在窗口初始化代码之前即可:

import PySimpleGUI as sg

# 先定义数据库连接、Twilio发送等依赖函数
def create_connection(db_name):
    # 实现数据库连接逻辑
    pass

def flow_twilio(first_name, repeats_left):
    # 实现Twilio短信发送逻辑
    pass

string_of_today = "2024-05-20"  # 替换为自动获取今日日期的代码
database = "your_database.db"

# 程序启动时自动执行检查函数
text_today()

# 后续创建并显示PySimpleGUI窗口
layout = [
    [sg.Text("患者提醒系统已启动")],
    [sg.Button("退出")]
]

window = sg.Window("患者提醒", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "退出":
        break

window.close()

进阶方案:用线程避免窗口卡顿

如果text_today()函数运行耗时较长(如数据库查询缓慢),直接调用会导致窗口启动延迟。这种情况可以用Python的threading模块在后台运行函数:

import threading

# 程序启动时在后台异步执行函数
threading.Thread(target=text_today, daemon=True).start()

# 后续创建窗口...

daemon=True可确保线程在主程序退出时自动结束,避免残留进程。

内容的提问来源于stack exchange,提问作者Ian Kearns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:15:19