Runtime Error Hatası Gösterirken 2. Ekranın Oluşması

Merhabalar,

Program çalışmadığında hata versin diye şu kodu yazdım :

try:
   from tkinter import *
   from tkinter import messagebox

except:
   from Tkinter import *
   from Tkinter import messagebox

class Program():
   def SplashScreen():
       pass

   def İlkKullanım():
       pass

   def Editör():
       def Ayarlar():
           pass


if __name__ == "__main__":
   Program()

else:
   messagebox.showerror("Code Studio", "Uygulama Başlatılamadı \n Hata Kodu : 1")

Çalışmadığı zaman hatayı veriyor ancak “tk” başlıklı boş bir ekran daha oluşuyor :

Bahsettiğim 2. ekranın oluşmasını nasıl engellerim?

tkinter.messagebox.showinfo tkinter penceresi oluşmadan oluşmuyor.
Yani tkinter penceresi çalışmazsa çalışmaz.

Peki ya başka bir yolu var mı?

Evet

import sys
from tkinter import messagebox

def build():
     messagebox.showerror("aasas","asas")
     sys.exit()
end

Hala aynı şey oluyor.Hata adlı bir fonksiyon oluşturdum ve else kısmına Hata’yı çalıştırmasını söyledim.Hata almıyorum fakat 2. ekran duruyor.

Yukarıdaki end olmayacak.

def hata():
     if __name__ == "__main__":
           t = Program()
    else:
           messagebox.showerror("asas","asas")
           sys.exit()

Bunu denermisiniz,buda olmazsa kendi kodunuzu atın.

Program fonksiyon değil bir class
şu şekilde çağırın:

t = Program()

Maalesef olmadı

import sys

try:
    from tkinter import *
    from tkinter import messagebox

except:
    from Tkinter import *
    from Tkinter import messagebox

class Program():
    def SplashScreen():
        pass

    def İlkKullanım():
        pass

    def Editör():
        def Ayarlar():
            pass

def Hata():
    messagebox.showerror("Code Studio", "Uygulama Başlatılamadı \n Hata Kodu : 1")
    sys.exit()

if __name__ == "__main__":
    x = Program()

else:
    Hata()

python 2’mi kullanıyorsunuz ?
Ya da hata öncelik sırasında.

Şuna bir bakın isterseniz:

import sys

class Program():
    def hello():
        pass

def hata():
    if __name__ == "__main__":
        x = Program()
    else:
        messagebox.showerror("as","asas")
try:
    from tkinter import *
    from tkinter import messagebox
except ImportError:
    from Tkinter import *
    from Tkinter import messagebox
else:
    hata()

3.8.3 kullanmaktayım.

Attığınız kodu aynen denediğim zaman bile 2. ekran çıkıyor?

import tkinter as tk
from tkinter.messagebox import showinfo

tk.Tk().withdraw()

showinfo("title", "message")
3 Beğeni

tkinter.messagebox.showinfo herhangi bir tkinter kök penceresi açılmadan çalışmıyor. Eğer önceden bir pencere açılmamışsa otomatik olarak kendisi oluşturuyor. Eğer ek bir pencere gözükmesini istemiyorsanız yapabileceğiniz 4 şey var:

  1. tkinter dışında harici bir modülün uyarı diyaloğunu kullanmak.
  2. Harici bir modül kullanmak yerine uyarı diyaloğunu oluşturmadan önce bir tkinter penceresi açıp bunu kapamak:
    import tkinter as tk
    from tkinter import messagebox
    
    gecici_pencere = tk.Tk()
    gecici_pencere.withdraw()
    messagebox.showerror("Code Studio", "Uygulama Başlatılamadı \n Hata Kodu : 1")
    
  3. tkinter.messagebox.showerror kullanmak yerine tkinter ile kişiselleştirilmiş yeni bir hata penceresi oluşturmak:
    import tkinter as tk
    
    def hata_mesaji(title, text):
        root = tk.Tk()
        root.title(title)
        root.geometry('240x120')
        root.resizable(False, False)
        
        label = tk.Label(root, text=text)
        label.pack(side="top", fill="both", expand=True, padx=20, pady=20)
        
        button = tk.Button(root, text="OK", command=root.destroy, width=20)
        button.pack(side="bottom", expand=True)
        root.mainloop()
    
    hata_mesaji("Code Studio", "Uygulama Başlatılamadı \n Hata Kodu : 1")
    
  4. (Bence en mantıklısı) Hata penceresi açmamak. Sonuçta bu dosyada oluşturduğunuz class'ları harici dosyalarda da kullanmak isteyebilirsiniz. Ha yok ben kesin hata çıksın istiyorum diyorsanız da bence en iyisi konsoldan bir hata raise etmek:
    raise ImportError('Bu dosya dışarıdan import edilemez')
    
3 Beğeni

Program sırf ana betik olmadığı için bir pencere açıp hata vermek kadar ilginç bir şey daha önce görmedim. Niye yazdığınız kodun modülerliğini baltalıyorsunuz?

2 Beğeni

End kısmını anlamadım rubyden mi karistirdiniz xd

Bi yandan da ruby proglamlama öğreniyorum :smiley:

1 Beğeni

Sizce nasıl dil görünümü güzel ama kötü sözler duymuştum bu forumda onun hakkında

1 Beğeni

Python ile kod yazmayı sıkıcı hale getiriyor ve karmaşık.
Çok kötü değil gayet esnek bir dil nerdeyse bütün koşullu durumlar var:
if,elsif,else
unless-tersine if
case,when-if benzeri
ve döngüler:

100.times do
     puts "hello world"
end

python range(100)'e benziyor
ve for

liste.each do |i|
      puts i
end

Aslında baya garip bir dil madem karışıklığı seviyorsun bf öğren bence ondan sonra hangi dili ogrensen sıkıcı gelir :smile:

Sıkıcı hale getirmesinin nedeni kodlamanın aşırı zevkli oluşu.
Ara sıra girip class yapısı üzerine kod çalışıyorum :smiley: