возможно ли управлять или изменять поток процессов с помощью кнопок python tkinter. У меня есть два класса. Один GuiClass и другой ClientClass. Я хочу начать процесс через нажатие кнопки запуска. и остановить процесс, нажав кнопку остановки. Я знаю, как это сделать, когда нет занятий. Но как составная часть ClientClass от GuiClass, я не знаю, как это сделать. Мой процесс - генерация случайных значений. но в более позднем случае я буду использовать его для получения данных измерений датчика каждую секунду, и я отображаю эти данные в моем графическом интерфейсе.
(Я задавал тот же вопрос раньше, никаких ответов. Поэтому я упростил свой вопрос :)
class GuiClass:
def __init__(self, master, queue, endCommand, startCommand, stopCommand ):
self.queue = queue
self.radnom_value_var = tkinter.StringVar()
# Set up the GUI
Random_Value = tkinter.Label(master, text = "Value")
Random_Value.grid(row=2)
Random_Value_display = tkinter.Label(master, textvariable = self.radnom_value_var)
Random_Value_display.grid(row=4)
#buttons
console_end = tkinter.Button(master, text='Done', command=endCommand)
console_end.grid(row=11)
start_button = tkinter.Button(master, text='Start', command=startCommand)
start_button.grid(row=5)
stop_button = tkinter.Button(master, text='Stop', command=stopCommand)
stop_button.grid(row=6)
def processIncoming(self):
"""
Handle all the messages currently in the queue (if any).
"""
while self.queue.qsize():
try:
msg = self.queue.get(0)
# Check contents of q message
print (msg)
self.radnom_value_var.set(msg)
except queue.Empty:
pass
class ClientClass:
def __init__(self, master):
self.master = master
# Create the queue
self.queue = queue.Queue()
# Set up the GUI part
self.gui = GuiClass(master, self.queue, self.endApplication, self.start_Command, self.stop_Command)
self.start_status = 1 #-------do i need this? or what do i need here?
self.running = 1
self.thread1 = threading.Thread(target=self.workerThread1) # or can i create different thread based on button pressing?
self.thread1.start()
# Start the periodic call in the GUI to check if the queue contains
# anything
self.periodicCall()
def periodicCall(self):
if self.running==1: #because of this program start when i run the code. but i want is it wait for start button press
self.gui.processIncoming()
if self.running==0:
import sys
sys.exit(1)
self.master.after(1000, self.periodicCall)
def workerThread1(self):
while self.running==1:
time.sleep(1)
msg = rand.random()
self.queue.put(msg)
'''
i tried something like this. not successfull `
def workerThread1(self):
while self.start_status == 1 and self.running!=0 :
time.sleep(1)
msg = rand.random()
self.queue.put(msg)
print("start status ")
while self.stop_status = =1and self.running!=0:
time.sleep(1)
print("stop )
'''
def endApplication(self):
self.running = 0
def start_Command(self):
self.start_status = 1
def stopCommand(self):
self.stop_status = 1
rand = random.Random()
root = tkinter.Tk()
client = ClientClass(root)
root.mainloop()