问题描述
我正在使用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应用程序可以查看该文件(如果已更改),因此它知道何时停止显示加载屏幕。