Python GUI Arayüzü Oluştururken "name 'DateEntry' is not defined" Hatası

Delilm

Hectopat
Katılım
1 Ağustos 2021
Mesajlar
123
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Jupyter Notebook kullanıyorum. GUI arayüzü oluşturmaya çalışıyorum. İzlediğim eğitim videosundaki her şeyi yaptım. "from tkinter import *" şeklinde tkinter kütüphanesini import ettim. DateEntry modülünü kullanabilmek için "pip install tkcalendar" şeklinde tkcalendar kütüphanesini de import ettim.
Aldığım hata bu :
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-bdea194607f5> in <module>
25 hatırlatma_tipi_açılır_menü.pack(padx=10, pady=10, side=LEFT)
26
---> 27 hatırlatma_tarih_seçici = DateEntry(frame_üst, width=12, background="orange", foreground="black", borderwidth=1, locale="de_DE")
28 hatırlatma_tarih_seçici._top_cal.overrideredirect(False)
29 hatırlatma_tarih_seçici.pack(padx=10, pady=10, side=RİGHT)

NameError: name 'DateEntry' is not defined
 
Kodunu düzgün bir şekilde buraya atarsan yardımcı olabiliriz.
 
Kodunu düzgün bir şekilde buraya atarsan yardımcı olabiliriz.
from tkinter import *
pip install tkcalendar
ÇIKTI :
Collecting tkcalendar
Using cached tkcalendar-1.6.1-py3-none-any.whl (40 kB)
Requirement already satisfied: babel in c:\users\pc\anaconda3\lib\site-packages (from tkcalendar) (2.9.0)
Requirement already satisfied: pytz>=2015.7 in c:\users\pc\anaconda3\lib\site-packages (from babel->tkcalendar) (2021.1)
Installing collected packages: tkcalendar
Successfully installed tkcalendar-1.6.1
Note: you may need to restart the kernel to use updated packages.

master = Tk()
canvas = Canvas(master, height=450, width=750)
canvas.pack()

frame_üst = Frame(master, bg="#add8e6")
frame_üst.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)

frame_alt_sol = Frame(master, bg="#add8e6")
frame_alt_sol.place(relx=0.1, rely=0.21, relwidth=0.23, relheight=0.5)

frame_alt_sağ = Frame(master, bg="#add8e6")
frame_alt_sağ.place(relx=0.34, rely=0.21, relwidth=0.56, relheight=0.5)

hatırlatma_tipi_etiket = Label(frame_üst, bg="#add8e6", text="Hatırlatma Tipi",font="Verdana 12 bold")
hatırlatma_tipi_etiket.pack(padx=10, pady=10, side=LEFT)

hatırlatma_tipi_opsiyon = StringVar(frame_üst)
hatırlatma_tipi_opsiyon.set("\t")

hatırlatma_tipi_açılır_menü = OptionMenu(frame_üst,
hatırlatma_tipi_opsiyon,
"Doğum Günü",
"Alışveriş",
"Ödeme")
hatırlatma_tipi_açılır_menü.pack(padx=10, pady=10, side=LEFT)

hatırlatma_tarih_seçici = DateEntry(frame_üst, width=12, background="orange", foreground="black", borderwidth=1, locale="de_DE")
hatırlatma_tarih_seçici._top_cal.overrideredirect(False)
hatırlatma_tarih_seçici.pack(padx=10, pady=10, side=RİGHT)

hatırlatma_tarihi_etiket = Label(frame_üst, bg="#add8e6", text="Hatırlatma Tarihi", font="Verdana 12 bold")
hatırlatma_tarihi_etiket.pack(padx=10, pady=10, side=LEFT)
master.mainloop()
 
Mesaj yazma bölümünde kodunuzun okunabilirliğini arttırmak adına </> butonu var görüyor olmalısınız. Tıkladıktan sonra kodunuzu yazın.
Ayrıca kullandığınız değişken isimlerinde Türkçe karakter kullanmaktan kaçının.
side=RİGHT olarak bir parametre belirtmişsiniz ama right değerine sahip bir değer bulunmuyor. Sorununuza gelecek olursak normal şartlarda böyle bir tanımın olmadığını söylüyor. Fakat kullanılan modülün dokümantasyonuna bakınca ki o da bu oluyor(yalnızca ilgili kısım). Son olarak şunu da söylemem gerekiyor. pip install tkcalendar bu harici olarak internette olan bir modülü cihazınıza indirir. Bunu yazdıktan sonra kodda kullanmak için import tkcalendar demelisiniz.
 
</> butonunu görmemişim. İzlediğim eğitim videosunda
Kod:
side=RİGHT
olarak kullanılıyordu.
Kod:
pip install tkcalendar
yazdıktan sonra
Kod:
import tkcalendar
yazmam işe yaramadı ve eğitim videosunda da
Kod:
import tkcalendar
kodunu yazmıyordu. Sorunum çözülmedi yani.
İzlediğim eğitim videosunun linki:
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
Kodun daha düzgün hali
Python:
master = Tk()
canvas = Canvas(master, height=450, width=750)
canvas.pack()

frame_üst = Frame(master, bg="#add8e6")
frame_üst.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)

frame_alt_sol = Frame(master, bg="#add8e6")
frame_alt_sol.place(relx=0.1, rely=0.21, relwidth=0.23, relheight=0.5)

frame_alt_sağ = Frame(master, bg="#add8e6")
frame_alt_sağ.place(relx=0.34, rely=0.21, relwidth=0.56, relheight=0.5)

hatırlatma_tipi_etiket = Label(frame_üst, bg="#add8e6", text="Hatırlatma Tipi",font="Verdana 12 bold")
hatırlatma_tipi_etiket.pack(padx=10, pady=10, side=LEFT)

hatırlatma_tipi_opsiyon = StringVar(frame_üst)
hatırlatma_tipi_opsiyon.set("\t")

hatırlatma_tipi_açılır_menü = OptionMenu(frame_üst,
                                        hatırlatma_tipi_opsiyon,
                                        "Doğum Günü",
                                        "Alışveriş",
                                        "Ödeme")
hatırlatma_tipi_açılır_menü.pack(padx=10, pady=10, side=LEFT)

hatırlatma_tarih_seçici = DateEntry(frame_üst, width=12, background="orange", foreground="black",
                                    borderwidth=1, locale="de_DE")
hatırlatma_tarih_seçici._top_cal.overrideredirect(False)
hatırlatma_tarih_seçici.pack(padx=10, pady=10, side=RİGHT)

hatırlatma_tarihi_etiket = Label(frame_üst, bg="#add8e6", text="Hatırlatma Tarihi", font="Verdana 12 bold")
hatırlatma_tarihi_etiket.pack(padx=10, pady=10, side=RİGHT)
master.mainloop()
 
Yazmam işe yaramadı.

Çünkü videoyu kesin olarak izlememişsiniz veya Python'u tam olarak öğrenmeden hemen bir şeyler yapma derdine düşmüşsünüz. Siz ne gördüyseniz aynısını uygulamışsınız. Hiç farklı bir bakış açısıyla düşünüpte
from tkcalendar import DateEntry yazsam ne olur diye kendinizi dahi yormamışsınız.(ki izlediğiniz eğitim videosunda da aynısını yazıyor tam olarak şurada )
olarak kullanılıyordu.
Büyük harf kullanımında i yerine ı yapmalısınız(gerçi kodu yazdığınız ortam bunun doğrusunu gösteriyor)

from "klasör adı" import "python dosyası"
from tkinter import * -> tkinter klasöründeki, her şeyi projeye dahil et böyle yapınca tkinter.Tk() yazmanıza gerek kalmamış oluyor direk Tk() yazabiliyorsunuz
 
İlk olarak yazılım dünyasında yeni olduğumu söylememde fayda var. Kullandığım üslup vb. şeylerden bunu anlamış olmanız çok olası diye düşünüyorum. Eğitim serisini size attığım videosuna kadar yani 40. bölümüne kadar not alarak izledim ve yapabildiğim kadarıyla kendi örneklerimle çeşitlendirerek kendi kodlarımı yazdım. Ta ki bu hatayı alana kadar. Eğitim serisinde eğitimin bir adımı olarak bu adım gösterilmiş ve bende bunu uyguluyorum. Yani Python'u tam olarak öğrenmeden hemen bir şeyler yapma gibi bir derdim yok. Öğretilmeye çalışılan şeyi ilk önce taklit edip mantığını kavramaya sonra da kendi örneklerimle çeşitlendirip mantığını oturtmaya çalışıyorum. Ne kadar doğru bilmiyorum ama izlemeye çalıştığım yol bu şekilde. Evet videoda from tkcalendar import DateEntry bölümünü görmemişim. Sorunum çözüldü desteğiniz için çok teşekkür ederim.
 
Kadar not alarak izledim

Tebrik ediyorum.

Anlamış olmanız çok olası diye düşünüyorum

Elbette.

Yapabildiğim kadarıyla kendi örneklerimle çeşitlendirerek kendi kodlarımı yazdım

Bravo bu şekilde devam etmelisiniz.

Öğretilmeye çalışılan şeyi ilk önce taklit edip mantığını kavramaya sonra da kendi örneklerimle çeşitlendirip mantığını oturtmaya çalışıyorum

Ki doğru olanda bu zaten.

Ta ki bu hatayı alana kadar

Eğitimin bir amacı olmasa da öğrenim sürecindeki (ki bu da dili kullandığınız her an için geçerli) hata ile karşılaşıp çözüm üretme üzerine harcadığınız vakit size değer katan bir diğer etmenlerden biri. Her hata alışta bir foruma yazmaktansa İngilizce bilinmese dahi önce çeviriye belirli bir uslup ile yazıp çevirisini internette aratmayı denediğiniz vakit işte o zaman bir adım daha ilerlemiş oluyorsunuz. Unutmayın her zaman en son çareniz bir foruma (forum sitesine) sorununuzu yazmak olsun.

Evet videoda from tkcalendar import DateEntry bölümünü görmemişim

Olabilir insanlık hali deyip geçilebilir. Bundan da bir şeyler öğrenirsiniz örneğin kodları incelemeyi

Sorunum çözüldü desteğiniz için çok teşekkür ederim.

Rica ederim. Bu arada yukarıda yazdıklarımı aşağılayıcı olarak algılamayın. Kendimde gördüğüm ve forumlarda dolaşırken rastladığım davranışlardan ötürü size de üstte yazdıklarımı söyledim. Sonuçta bende yazılım dehası, süper algoritma kurabilen biri değilim. Kimine göre başlangıç kimine göre orta seviye kimine göre yüksek bir seviye. Bana göreye gelecek olursak kendimi herhangi bir sınırlamaya koymuyorum.

Kolay gelsin...

Ayrıyeten bir eğitim kaynağı arıyorsanız (Python için) Şu kaynağa göz atabilirsiniz. Başyapıt diyebilirim.(Türkçe Kaynak)
 
Bundan sonra böyle yaparım. Tavsiyeniz için sağ olun.
Anlayabiliyorum sizi.
Size de
Ayrıyeten bir eğitim kaynağı arıyorsanız (Python için) Şu kaynağa göz atabilirsiniz. Başyapıt diyebilirim.(Türkçe Kaynak)
Kesinlikle inceleyeceğim. Tekrardan teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…