تابع ()get در Tkinter کار نمی‌ کند

با سلام

from tkinter import *
window = Tk()
entry1 = Entry(window)
entry1.pack()
a= entry1.get()
def login():
 if a == "ali": print("Welcome ali")
 else: print("Ok")
button1 = Button(window,text="Login",command=login)
button1.pack()
button2 = Button(window,text="Exit",command=window.destroy)
button2.pack()
mainloop()

با توجه به کد های بالا پس از وارد کردن عبارت ali و فشردن دکمه لاگین، باید Welcome ali پرینت شود اما این اتفاق نمی افتد و همیشه عبارت Ok را پرینت می کند. لطفا راهنمایی کنید.

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

سلام،
من در مورد برنامه نویسی پایتون اطلاعات چندانی ندارم فقط کدتون رو توی یک IDE آنلاین اجرا کردم و مقادیر a رو یه بررسی کوچیک کردم در حالات مختلف. چیزی که مشخصه a وقتی تابع شما اجرا میشه مقدارش خالیه، یعنی زود دارین a رو میخونید از صفحه ، یعنی احتمالا موقع لود صفحه(یا یه وقت غیر مناسبه دیگه) داره a رو پر میکنه، خود دریافتی رو مستقیم گذاشتم توی متد و آنلاین خروجی گرفتم درست جواب داد برای ali خروجی Welcome Ali داده شد. زمانی که شما روی دکمه کلیک میکنید a رو از TextBox پر نمیکنه بلکه قبلا پر شده و مقدارش null هست.

کد اصلاح شده:

from tkinter import *
window = Tk()
entry1 = Entry(window)
entry1.pack()

#a= entry1.get();

def login():
#a is null when this func starts
 if entry1.get() == "ali": print("Welcome ali")
 
 else: print("ok")
button1 = Button(window,text="Login",command=login)
button1.pack()
button2 = Button(window,text="Exit",command=window.destroy)
button2.pack()
mainloop()

حالا خودتون بررسی کنید که برای پر کردن صحیح مقدار a چه زمان باید فراخوانی بشه، یا به تناسب زبان مورد استفادتون ممکنه روش متفاوتی بخواد. طبیعتا باید توی تابع login یک بار از کنترل متنی مقدار دهی کنید متغیر رو. برای رفع باگ های حلقه بهتره همیشه نقطه به نقطه مقدار متغیر‌های موثرتون رو چک کنین قطعا زودتر به پاسخ میرسین.
موفق باشید.

online-support-icon