PyQt5 Menu Barda Yeni Pencere Acmak

Merhaba Arkadaslar,

python ile 6-7 aylik bir tanisikligim oldu suan yapmak istedigim bir uygulama var. Aldigim verileri sql tutup sonrada guncelleme, silme, arama, ekleme islemleri yapiyorum fakat pyqt5 munu bar tiklayip yeni pencere acip islemleri orada yapmak konusunda takilip kaldim. Ayrica navigasyon menusude eklemek istiyorum ornekler ulasip inceledim aynisi yapmaya calistim fakat bir turlu haritayi cikartamadim. Hata kodu vermeden bir cikti verip islem sonlaniyor. Fikriniz almak isterim.

hata vermeden kapanmasının nedeni sys.exit(sys._exec()) kodunu kullanmamış olman olabilir sys modülünü import edip dener misin?
bu arada foruma hoşgeldiniz

Hata verilip verilmediğini görmek için projeyi konsoldan çalıştırmayı deneyin.

Tesekkurler

Moduller konusunda herhangi bir sıkıntı olması gereken bütün moduller ekli

kodu calıstırdıgımda aldıgım cikti " Figure(layout=FigureLayout(height=‘420px’)) "

Onuda denedim aynı cıktıyı alıyorum

tamam da hiç denediniz mi söylediğimi

O zaman kodunuzu da bizimle paylaşın:

Simdi denedim fakat hata mesaji aldim :slight_smile:

sys.exit(sys._exec())
AttributeError: module ‘sys’ has no attribute ‘_exec’

ha onun sebebi benim sana verdiğim fonksiyonun yanlış olması ama galiba hemen kapanmamasını sağlayacak kod ona benzer bir şeydi

Suan farkli bir sey deniyorum onun uzerine biraz calisim paylasirim.

sys.exit(sys.exec_())
AttributeError: module ‘sys’ has no attribute ‘exec_’
Hata ayni normalde calisma seklini paylasim

app = QApplication(sys.argv)
sys.exit(app.exec_())

ha cevabı biliyor musun normalde

Evet onu biliyorum benim kurgulayamadigim sanirsam ilki pyqt5 ve sqlite ile ilgili bir durum var. ikinci durum icin yeni pencere acimayi engelleyen farkli bir durum daha var onu fark edemedim
harita icinde suanlik herhangi bir tezim yok. Kod uzerinde biraz calisim paylasirim.

tamam o zaman siz biraz daha uğraşın kodlarla sonra paylaşırsınız çözemezseniz

Muhtemelen benimde zamanında karşılaştığım bir hata ile karşılaşıyorsun. Hiçbir hata kodu vermeden pencerenin açılmasını beklediğin halde açılmıyorsa yüksek ihtimal pencereyi yeni bir değişkene kaydetmemişsindir. Pencerenin ram üzerinde bir adreste tutulması gerekiyor. Başka bir class oluşturup QWidget veya QMainWindow sınıflarından miras alarak kendi widgetiniz yazın. Daha sonra o pencereye geçiş yapmak istediğinizde
diyelim ki oluşturduğunuz sınıfın adı yeniwindow olsun

pencere = yeniwindow()
pencere.show()

yapmalısınız.
yeniwindow().show() gibi birşey yapıyorsanız bu ram üzerinde bir değer tutmayacağı için kapanacaktır en azından ben sebebinin bu olduğunu bulmuştum ama çözüm çalışıyor eğer sorun böyleyse

self.seninactionun.triggered.connect(self.show)
def show(self):
    window = yeniwindow()
    window.show()
#eğer asıl pencere kapanacaksa pencereyi globala kaydedebilirsin
    globals()["pencere"] = window
    self.destroy()


class yeniwindow(QWidget):
    def __init__(self,*args,**kwargs):
        super().__init__()
        soket = kwargs["soket"]
        self.ui = File_SystemW()
        self.ui.setupUi(self)

yeniwindow zaten oluşturulduğu anda bellekte yer kaplıyor. Ekranın kapanmasının sebebi, ekranı temsil eden nesneye hiçbir değişken veya başka bir nesne işaret etmiyorsa Python’un garbage collector’u tarafından otomatik olarak silinmesi.

1 Beğeni

Buda bellekten siliyor diye biliyordum aslında o yüzden bellekte yer tutmuyor demek istemiştim eksik söylemişim sanırım

1 Beğeni

Peki garbage collector u kapatsak bu yöntem işe yararmı acaba ?

Denemek lazım, Python’daki garbage collector’un asıl görevi reference cycle’larını kırmak. Onun haricinde reference count’u sıfır olan nesneler anında siliniyor.

Tabii bu ekranın silinmesini engellese bile bir çözüm değil, memory leak’a sebep olur.