Selamlar, forumda yeniyim pythonda öğrenmek istediğim bir şey var.
Tkinter ile start butonu yaptım ve ve bu botumu çalıştırıyor ve bu botumun yaptığı işlem 20 dakika srüyor.
Fakat ben bunu stop button ile durdurmak istiyorum. overflow da bir kaç örnek buldum fakat bunlar fonksiyonu döngü sonunda kontrol ediyor. Benim döngüm 20 dakikada bitiyor.
Selenium botumu fonksiyon olarak tanımladım. Stop buttona basıgımda bu düngüyü durdurması veya return etmesi mümkünmüdür ?
Evet mümkün. Mesela bir tane değişken tanımlarsınız. stop
düğmesi bu değişkenin değerini değiştirir ve döngü de bu değişkenin değişmesi durumunda sonlanabilir.
1 Beğeni
örnek bir kod atar mısınız rica etsem. @dildeolupbiten
Tabi, aşağıdaki kodlara bakın.
import tkinter as tk
degisken = True
def start(master, t):
global degisken
if degisken:
print("Çalışıyor")
master.after(t * 1000, lambda: start(master, t))
else:
degisken = True
def stop():
global degisken
degisken = False
print("Durdu")
def main():
root = tk.Tk()
start_button = tk.Button(
master=root, text="Start", command=lambda: start(root, 1)
)
start_button.pack()
stop_button = tk.Button(master=root, text="Stop", command=stop)
stop_button.pack()
root.mainloop()
main()
Merhaba.
O zaman bu bot threading mi kullanıyor?
Hayır bir buton command ile farklı bir fonksiyonu cagırıyor.
burada start fonksiyonunun altına bir selenium işlemi yapınca o buton donuyor. Threading ile o işlemi yaptırıca da durdur fonksiyonu işlev görmüyor.
after
metodunu kullanıyor musunuz? Kullanıyorsanız, ilk parametresi 0 değil mi yoksa?
dildeolupbiten:
import tkinter as tk degisken = True def start(master, t): global degisken if degisken: print(“Çalışıyor”) master.after(t * 1000, lambda: start(master, t)) else: degisken = True def stop(): global degisken degisken = False print(“Durdu”) def main(): root = tk.Tk() start_button = tk.Button( master=root, text=“Start”, command=lambda: start(root, 1) ) start_button.pack() stop_button = tk.Button(master=root, text=“Stop”, command=stop) stop_button.pack() root.mainloop() main()
import tkinter as tk
degisken = True
def start(master, t):
global degisken
if degisken:
master.after(t * 1000, lambda: start(master, t))
from selenium import webdriver
chrome = webdriver.Chrome()
chrome.get("https://yazbel.com")
import time
time.sleep(20)
else:
degisken = True
def stop():
global degisken
degisken = False
print("Durdu")
def main():
root = tk.Tk()
start_button = tk.Button(
master=root, text="Start", command=lambda: start(root, 1)
)
start_button.pack()
stop_button = tk.Button(master=root, text="Stop", command=stop)
stop_button.pack()
root.mainloop()
main()
böyle kullanıyorum acaba yanlışmı düzenledim.
master.after
'ın ilk parametresini 0
yapın.
1 Beğeni
yaptım fakat tekrar basarısız oldu.
Normal, arayüz hiç update edilmiyor. Bu yüzden threading veya multiprocessing kullanmanız lazım diye düşünüyorum.
Sizin selenium ile alakalı fonksiyonunuzu görebilir miyiz?
Bu arada kodlarınızı aşağıdaki gibi değiştirmeniz, start
fonksiyonuna tekrar tekrar basıldığı zaman bir kaç defa çalışmasını önleyecektir.
import tkinter as tk
degisken = False
def process(master, t):
if degisken:
print("Çalışıyor")
master.after(1 * 1000, lambda: process(master, t))
def start(master, t, start_button):
global degisken
if not degisken:
start_button.configure(command=lambda: None)
print("Başladı")
degisken = True
process(master, t)
def stop(master, t, start_button):
global degisken
if degisken:
start_button.configure(
command=lambda: start(master, t, start_button)
)
print("Durdu")
degisken = False
process(master, t)
def main():
root = tk.Tk()
start_button = tk.Button(
master=root,
text="Start",
command=lambda: start(root, 1, start_button)
)
start_button.pack()
stop_button = tk.Button(
master=root,
text="Stop",
command=lambda: stop(root, 1, start_button)
)
stop_button.pack()
root.mainloop()
main()
Butona tıkladığınızda döngüden çıkmak isterseniz break
kodunu fonksiyona ekleyebilirsiniz