Here is the simple UI with my attempt for this...
import tkinter as ttk
import subprocess
import sys
import time
import os
import tkinter.font as font
from tkinter import messagebox
from tkinter.ttk import *
app = ttk.Tk()
app.geometry("400x400")
app.configure(bg='gray')
photo = ttk.PhotoImage(file=r"C:\Users\ex\ex_button_active.png")
myFont = font.Font(family='Helvetica', size=20, weight='normal')
ttk.Label(app, text='Ex', bg='gray', font=(
'Verdana', 15)).pack(side=ttk.TOP, pady=10)
app.iconbitmap(r'C:\Users\ex\ex_icon.ico')
def ex_activation():
global pro
print("Running program!")
pro = subprocess.Popen("python programex.py", shell=True)
def ex_stop():
global pro
print("Stopping Program... Please Wait!")
os.kill(pro.pid, 0)
ex_activation_button = ttk.Button(app, bg='black', image=photo, width=120, height=120, command=ex_activation)
ex_activation_button += 1
if ex_activation_button < 1:
messagebox.showinfo("showinfo", "In Order to Run Again, Press ""Stop Program""")
ex_stop_button = ttk.Button(app, bg='Gray', text='Stop Program', width=12, command=ex_stop, height=3)
ex_stop_button['font'] = myFont
app.title("Ex")
ex_activation_button.pack(side=ttk.TOP)
ex_stop_button.pack(side=ttk.LEFT)
# app.mainloop()
while True:
try:
app.update()
app.update_idletasks()
except KeyboardInterrupt:
pass
The goal here is to add a "One Process Only" Warning when the button is clicked more than once. The real question is how would I reset this counter for the number of times the start button was clicked after the stop button is clicked. This is a looping program and that is the reason I have a stop button. Any help greatly appreciated!
You can disable the button by change it's state. After disabled, the button cannot be clicked.
# disable a button:
ex_activation_button['state'] = 'disabled'
# re-enable the button:
ex_activation_button['state'] = 'normal'
# here is the change you need to add:
def ex_activation():
global pro
print("Running program!")
ex_activation_button['state'] = 'disabled'
pro = subprocess.Popen("python programex.py", shell=True)
def ex_stop():
global pro
print("Stopping Program... Please Wait!")
os.kill(pro.pid, 0)
ex_activation_button['state'] = 'normal'