如何在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
相关产品推荐
相关产品推荐

