Tkinter按钮在函数执行期间保持按下状态

问题描述

我正在使用Tkinter库在Python中编写一个内部控制程序。 有一个按钮可以启动另一个脚本中的功能(我将其放在开头)。

该按钮可以正常工作,但是在执行我的功能时仍然按下,这需要一些时间来执行... 我将放置一个“等待屏幕”,而不是仅按下按钮并且该程序无响应。 我加入了代码摘录。

我到处搜索,但找不到清晰的解决方案。

希望你能帮助我!

主脚本:

import backend
from tkinter import *

window = Tk()
frameMain  = Frame(window)
buttonConnection = Button(frameMain,text="Connect devices",command=backend.configDevices)
frameMain.pack()

backend.py脚本:

pathConfip = 'assets/confip.txt'
...
def configDevices():
    with open(pathConfip,'r',encoding='utf-8') as fileConfip:
        # ips are in a text file,separated by "###" each time
        ip = fileConfip.read().split('###')
    global bulb1,bulb2,bulb3,stripeBulb,lgtv,cast
    bulb1 = Bulb(ip[0])
    bulb2 = Bulb(ip[1])
    bulb3 = Bulb(ip[2])
    stripeBulb = Bulb(ip[3])
    lgtv = WebOsClient(ip[4])
    cast = Chromecast(ip[5])

解决方法

正如布赖恩(Bryan)在评论中指出的那样,处理此问题的最佳方法是使用线程。也许最简单的方法(不花太多钱)是通过命令运行另一个python脚本。

import os
os.system("python file.py &")

请注意,这将在Linux上运行。要在Windows的后台运行命令,您将需要使用pythonw.exe而不是python.exe(请参见here)。 Pythonw也将在Linux上运行。

最后,如何知道命令何时结束? 同样,最简单(但也很丑)的方法是修改位于同一文件夹中的文件(json或txt)。然后,大约每秒钟,tkinter应用程序可以查看该文件(如果已更改),因此它知道何时停止显示加载屏幕。